Fel*_*rri 1 closures core-location ios swift
在我的代码中,我在类中创建了一个 CLLocationManager 属性。我想使用闭包来初始化位置管理器,因为我可以在那里设置委托,而且我认为在其声明上配置属性非常棒(就像我以前在 Objective C 中的属性 getter 中所做的那样)。
所以我尝试了这个:
class MapViewController: UIViewController {
var locationManager: CLLocationManager = {
var lm = CLLocationManager()
lm.delegate = self
return lm
}()
extension MapViewController: CLLocationManagerDelegate {
}
Run Code Online (Sandbox Code Playgroud)
但我在 lm.delegate = self 行上收到以下错误。
/Users/.../MapViewController.swift:18:23:无法将“NSObject -> () -> MapViewController”类型的值分配给类型“CLLocationManagerDelegate”?
MapViewController 符合委托(因为下面的扩展),所以我认为“非确认”不是问题。
我知道,我可以在 viewDidLoad 上初始化委托,但如果可以在属性本身上初始化,我真的很想学习这样做,因为它感觉很简洁。
谢谢!
哦,我刚刚找到答案:
lazy var locationManager: CLLocationManager = { [unowned self] in
var lm = CLLocationManager()
lm.delegate = self
return lm
}()
Run Code Online (Sandbox Code Playgroud)
从 Mike Buss 撰写的关于 Swift 延迟初始化的这篇很酷的文章中得到它:
http://mikebuss.com/2014/06/22/lazy-initialization-swift/
| 归档时间: |
|
| 查看次数: |
1668 次 |
| 最近记录: |