gpt4 book ai didi

ios - 使用闭包初始化属性时将自己设置为委托(delegate)

转载 作者:搜寻专家 更新时间:2023-11-01 06:18:35 26 4
gpt4 key购买 nike

在我的代码中,我在我的类中创建了一个 CLLocationManager 属性。我想使用闭包来初始化位置管理器,因为我可以在那里设置委托(delegate),而且我认为在它们的声明上配置属性非常棒(就像我以前在 Objective C 中对属性 getter 所做的那样)。

所以我尝试了这个:

class MapViewController: UIViewController {
var locationManager: CLLocationManager = {
var lm = CLLocationManager()
lm.delegate = self
return lm
}()

extension MapViewController: CLLocationManagerDelegate {
}

但我在 lm.delegate = self 行收到以下错误。

/Users/.../MapViewController.swift:18:23: Cannot assign value of type 'NSObject -> () -> MapViewController' to type 'CLLocationManagerDelegate?'

MapViewController 符合委托(delegate)(因为下面的扩展),所以我认为“不确认”不是问题。

我知道我可以在 viewDidLoad 上初始化委托(delegate),但如果可以在属性本身上初始化我真的很想学习这样做,因为它感觉很整洁。

谢谢!

最佳答案

哦,我刚找到答案:

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/

关于ios - 使用闭包初始化属性时将自己设置为委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38898237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com