在使用闭包初始化属性时将self设置为委托

时间:2016-08-11 13:48:04

标签: ios swift closures core-location

在我的代码中,我在我的类中创建了一个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上初始化委托,我知道,但如果可以初始化属性本身,我真的想学习这样做,因为它感觉很好。

谢谢!

1 个答案:

答案 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/