Swift 2版本返回可选变量?

时间:2016-02-21 04:16:29

标签: swift swift2

我试图为属性实现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!
    }()
}

2 个答案:

答案 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! }()
    }
}

宣布这样一个关闭让你变得可爱的'一线吸气器,但我会离开它,因为它更清楚。

相关问题