在我的代码中,我在我的类中创建了一个CLLocationManager属性。 我想使用一个闭包来初始化位置管理器,因为我可以在那里设置委托,我认为在声明上配置属性真是太棒了(就像我以前在属性getter上的Objective C中那样)。
所以我尝试了这个:
class MapViewController: UIViewController {
var locationManager: CLLocationManager = {
var lm = CLLocationManager()
lm.delegate = self
return lm
}()
extension MapViewController: CLLocationManagerDelegate {
}
但是我在lm.delegate = self line上收到以下错误。
/ Users /.../ MapViewController.swift:18:23:无法分配 'NSObject - >类型的值() - >要输入MapViewController' 'CLLocationManagerDelegate?'
MapViewController符合委托(由于下面的扩展名),所以我不认为“非确认性”是问题。
我可以在viewDidLoad上初始化委托,我知道,但如果可以初始化属性本身,我真的想学习这样做,因为它感觉很好。
谢谢!
答案 0 :(得分:3)
哦,我刚刚找到了答案。没关系。
lazy var locationManager: CLLocationManager = { [unowned self] in
var lm = CLLocationManager()
lm.delegate = self
return lm
}()
来自这篇关于Mike Buss在Swift中进行延迟初始化的文章:http://mikebuss.com/2014/06/22/lazy-initialization-swift/