【发布时间】:2015-07-04 00:17:39
【问题描述】:
我写了下面的代码,总是报错
(1)变量self.pointOnMap在初始化前使用。
和
(2) 变量 self.pointOnMap 在初始化之前被闭包捕获。
我不明白为什么,因为我已经声明了 self.pointOnMap = MKPointAnnotation() 应该足够早地初始化它。
class Pin: NSManagedObject {
var mapView: MKMapView?
var pointOnMap: MKPointAnnotation?
@NSManaged var lat: Double
@NSManaged var lon: Double
@NSManaged var photos: Photo?
override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
self.pointOnMap = MKPointAnnotation()
}
init(dictionary: [String : AnyObject], context: NSManagedObjectContext) {
let entity = NSEntityDescription.entityForName("Pin", inManagedObjectContext: context)!
super.init(entity: entity, insertIntoManagedObjectContext: context)
lat = 1.0
lon = 2.0
self.pointOnMap = MKPointAnnotation()
println(self.pointOnMap) // RETURNS ERROR (1)
self.pointOnMap!.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon) // RETURNS ERROR (2)
}
【问题讨论】:
-
在哪一行显示这个错误?
-
println(self.pointOnMap) // 返回错误 (1) self.pointOnMap!.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon) // 返回错误 (2)
-
@Volker 按照链接中的建议将其作为隐式展开的可选选项也不起作用。
-
你看链接了吗,init里面的调用顺序不一样!我手头没有官方文档,但我记得也提到过类似的东西。
标签: swift