我试图为属性实现getter / setter。在计算属性中,我返回_locationManager
,但也只是第一次初始化:
var _locationManager: CLLocationManager? { get set }
var locationManager: CLLocationManager {
if let manager = _locationManager {
return manager
}
_locationManager = CLLocationManager()
return _locationManager!
}
上述声明是否有更像Swift的版本?例如,在C#
我可以这样做:
var locationManager: CLLocationManager {
return _locationManager ?? (_locationManager = CLLocationManager())
}
这是说返回_locationManager
,或者初始化加返回它。对于这种情况,Swift是否有某种速记或其他方式?
更新
以下是另一个版本。我试图坚持使用计算属性,以便它可以用于协议扩展和/或能够在进程中连接代理等:
var locationManager: CLLocationManager {
return _locationManager ?? {
self._locationManager = CLLocationManager()
return self._locationManager!
}()
}
答案 0 :(得分:1)
你可以使用懒惰属性:
lazy var locationManager: CLLocationManager = CLLocationManager()
只有首次使用时才会初始化惰性属性。
答案 1 :(得分:0)
如果你真的非常渴望,你可以做一些像你一样的问题,但它并不是非常漂亮。但是,在您引用的示例中,您应该使用惰性实例化作为Palle回答。
class Test {
}
var _test: Test?
var test: Test {
get {
return _test ?? { _test = Test() ; return _test! }()
}
}
宣布这样一个关闭让你变得可爱的'一线吸气器,但我会离开它,因为它更清楚。