ios - 快速迭代数组时出错

标签 ios arrays swift3

我试图循环遍历数组并获取坐标,但它给了我一个错误,我无法访问我的数组。数据通过序列传递,如果我打印它,它表明它正在工作,因此数据传输正确,但无法弄清楚为什么我无法迭代数组并提取纬度和经度。

这是控制台中的输出。

DeliveryDestinations(NameOrBusiness: Optional("In-N-Out Burger"), FirstLineAddress: Optional("550 Newhall Dr"), SecondLineAddress: Optional(" United States"), CityLineAddress: Optional(" San Jose"), PostcodeLineAddress: Optional(" CA 95110"), DistanceToDestination: Optional(9.2807823200000001), Lat: Optional(37.350253606833043), Long: Optional(-121.92182779312132))

import UIKit
import MapKit
import CoreLocation

class DeliveryLocationsVC: UIViewController {

    @IBOutlet weak var mapView: MKMapView!

    var addressArr = [DeliveryDestinations]()


    override func viewDidLoad() {
        super.viewDidLoad()

        print(addressArr)


navigationItem.title = "Delivery Location"
        // Do any additional setup after loading the view.

        for (theKey, theValue) in addressArr { //<-- error can't access the elements in array
            if (theKey == "Lat") {
                if let coordinates:DeliveryDestinations = theValue {
                print (coordinates)
            }
            print("Item \(theKey): \(theValue)")
            }
        }
    }
}

我的数组来自下面的结构

import Foundation
import MapKit

struct DeliveryDestinations {
    var NameOrBusiness: String?
    var FirstLineAddress: String?
    var SecondLineAddress: String?
    var CityLineAddress: String?
    var PostcodeLineAddress: String?
    var DistanceToDestination: CLLocationDistance?
    var Lat: Double?
    var Long: Double?


    init(NameOrBusiness: String?, FirstLineAddress: String?, SecondLineAddress: String?, CityLineAddress: String?, PostCodeLineAddress: String?, DistanceToDestination: CLLocationDistance?, Lat: Double?, Long: Double? ) {
        self.NameOrBusiness = NameOrBusiness
        self.FirstLineAddress = FirstLineAddress
        self.SecondLineAddress = SecondLineAddress
        self.CityLineAddress = CityLineAddress
        self.PostcodeLineAddress = PostCodeLineAddress
        self.DistanceToDestination = DistanceToDestination
        self.Lat = Lat
        self.Long = Long

    }

}

最佳答案

你有一个数组(而不是字典),所以你需要做的是像这样迭代:

for object in addressArr {
    ...
    // get coordinates from object
    let lat = object.Lat
    let long = object.Long
}

或者,如果您还需要表行的索引,您可以这样做:

for (i, object) in addressArr.enumerated() {
    ...
    // get coordinates from object
    let lat = object.Lat
    let long = object.Long
    print ("Destination at index \(i) has coordinate: (\(lat), \(long))")
}

我怎么知道它是一个数组?

代码中的表示法

 var addressArr = [DeliveryDestinations]()

始终意味着这是一个 DeliveryDestinations 对象数组。 当你打印出来时,你会得到数组中对象的打印结果。 在你的情况下,这个对象有一个“类似字典”的描述,所以打印函数像这样打印它。

在每个对象中,使用description函数,您可以指定在对象(或这些对象的数组)上打印时文本的外观

关于ios - 快速迭代数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994547/

相关文章:

java - 比较两个数组。返回值错误(一)

swift - 添加字典 swift 3 中包含的 double

ios - 以 Mp4 格式捕获视频

ios - Xcode:找不到-lPods 的库

php - 没有正则表达式的 PHP 中的 Piglatin 程序?

ios - textFieldShouldBeginEditing 被错误的文本字段触发

swift - 除非我滚动,否则页脚不会显示在 TableView 上

objective-c - 如何在 ios 中做多行 UILabel?

iphone - 自定义函数 "indexpath"

arrays - Swift:数组排序未正确完成