将属性设置为闭包内的值

时间:2014-10-13 17:21:44

标签: ios iphone swift ios8

我在视图控制器中创建了一个属性:

var cityPlaceMark = CLPlacemark()

我想将它分配到locationManger didUpdate位置功能的地标:

CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler:{(placemarks, error)->Void in
    if (error != nil) {
        println("Reverse geocode failed with error")
        return
    }

    if placemarks.count > 0 {

        //var pm = placemarks[0] as CLPlacemark

        self.cityPlaceMark = placemarks[0] as CLPlacemark
    }     
})

应用程序崩溃了一个Thread1:EXC_BAD_ACCESS。

如果我将它保存在闭包中声明的变量中(显示为" var pm"注释掉),它可以正常工作。

有人可以向我解释我做错了什么,以及如何正确地将它分配给一个属性。 谢谢!

1 个答案:

答案 0 :(得分:0)

看起来它可能是一个错误。

如果我将它变为可选的:

var cityPlaceMark: CLPlacemark?

并在闭包中实现它:

    CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error)->Void in

        if (error != nil) {
            println("Reverse geocode failed with error")
            return
        }

        if placemarks.count > 0 {

            self.cityPlaceMark = placemarks[0] as? CLPlacemark
        }
    })

它现在有效!