数组值的不同排列

时间:2017-05-31 07:29:13

标签: arrays swift

我正在尝试创建一个基于反向编码功能的地址数组,我将在下面附加该功能。然而,每当我从一系列值中输入纬度和经度然后将其附加到我的地址时代时,时代的顺序总是搞砸了。这是我的代码:

func getAddressFromLatLon(pdblLatitude: Double, withLongitude pdblLongitude: Double){
    var center : CLLocationCoordinate2D = CLLocationCoordinate2D()
    let lat: Double = pdblLatitude
    //21.228124
    let lon: Double = pdblLongitude
    //72.833770
    let ceo: CLGeocoder = CLGeocoder()
    center.latitude = lat
    center.longitude = lon

    let loc: CLLocation = CLLocation(latitude:center.latitude, longitude: center.longitude)


    ceo.reverseGeocodeLocation(loc, completionHandler:
        {(placemarks, error) in
            if (error != nil)
            {
                print("reverse geodcode fail: \(error!.localizedDescription)")
            }
            let pm = placemarks! as [CLPlacemark]

            if pm.count > 0 {
                let pm = placemarks![0]
                print(pm.country)
                print(pm.locality)
                print(pm.subLocality)
                print(pm.thoroughfare)
                print(pm.postalCode)
                print(pm.subThoroughfare)

                if pm.subThoroughfare != nil {
                    addressString = addressString + pm.subThoroughfare! + " "
                }
                if pm.thoroughfare != nil {
                    addressString = addressString + pm.thoroughfare! + ", "
                }
                if pm.locality != nil {
                    addressString = addressString + pm.locality! + ", "
                }
                if pm.administrativeArea != nil {
                    addressString = addressString + pm.administrativeArea! + " "
                }
                if pm.postalCode != nil {
                    addressString = addressString + pm.postalCode! + " "
                }
                print (addressString)
                addressStrings.append(addressString)
                addressString = ""
            }
    })
}

func mapView(_ mapView: MKMapView, regionWillChangeAnimated animated: Bool) {
    print(#function)
}


@IBAction func onSearh(_ sender: Any) {
    for i in 0 ..< ((stores!.count)-1)  {
        print (latitudes[i])
        print (longitudes[i])
        getAddressFromLatLon(pdblLatitude: latitudes[i], withLongitude: longitudes[i])
    }

我想知道你是否可以在你的项目中输入它,或者通过为同一输入提供不同的输出来找出函数为何具有确定性?

1 个答案:

答案 0 :(得分:0)

反向地理编码是一种异步函数,因为它是一个网络请求,因此您的函数调用可能不会按照调用它们的顺序返回。

如果您需要的顺序与调用的顺序完全相同,则可以在串行队列中运行getAddressFromLatLon函数。这将确保结果的顺序,但它会有性能劣势,因为在这种情况下您的网络请求无法同时运行。

如果我是你,我会将我的数据结构更改为一个结构,从中我可以访问具有索引以外的标识符的元素(例如,一个字符串,其中标识符为键,地址为值) 。在这种情况下,您仍然可以同时运行反向地理编码功能。