迭代数组swift时出错

时间:2017-12-27 15:18:33

标签: ios arrays swift3

我正在尝试循环遍历数组并获取坐标,但它给了我一个错误,我无法访问我的数组。数据通过一个seque传递,如果我打印它显示它正在工作,所以数据传输正确但无法解决为什么我不能遍历数组并拉出纬度和经度。

这是控制台中的输出。

  

DeliveryDestinations(NameOrBusiness:Optional(“In-N-Out Burger”),   FirstLineAddress:可选(“550 Newhall Dr”),SecondLineAddress:   可选(“美国”),CityLineAddress:可选(“圣何塞”),   PostcodeLineAddress:可选(“CA 95110”),DistanceToDestination:   可选(9.2807823200000001),Lat:可选(37.350253606833043),长:   可选(-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

    }

}

1 个答案:

答案 0 :(得分:3)

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

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数组。 打印出来时,可以在阵列中打印对象。 在您的情况下,此对象有一个&#34;字典,如&#34;说明,所以打印功能打印出来就像这样。

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