大佬教程收集整理的这篇文章主要介绍了ios – 通过将属性设置为nil,在Swift中再次触发延迟初始化器,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我这样定义我的属性:
lazy var object = { /*init code*/ }()
…以后调用该属性,初始化程序被触发一次.但是,如果我在程序中稍后将对象设置为nil,则不会再次调用初始化程序.如何在Swift中做到这一点?
>一个私有的初始化程序,实现为一个计算属性(或一个闭包,如果你愿意)
> private backing属性,存储实际值
>一个非私有属性,这是您在代码中实际使用的属性
代码如下所示:
class MyClass { private var _myPropInitializer: Int { return 5 } private var _myProp: Int? var myProp: Int? { get { if self._myProp == nil { self._myProp = self._myPropInitializer } return _myProp! } set { _myProp = newValue } } }
> initializer属性在需要初始化时返回变量的计算值,这是上面例子中的5整数
> myProp是一个可选的整数(能够存储一个零):
> on set,它会将新值存储在_myProp属性中
> on get,如果_myProp为零,它调用初始化程序,将其分配给_myProp,并返回其值
class Lazy<T> { private let _initializer: () -> T private var _value: T? var value: T? { get { if self._value == nil { self._value = self._initializer() } return self._value } set { self._value = newValue } } required init(initializer: () -> T) { self._initializer = initializer } }
注意:结构体不可用,因为不允许在属性getter内设置属性,而在类中.
那么你可以使用它如下:
class MyTESTClass { var lazyProp: Lazy<Int> init() { self.lazyProp = Lazy( { return 5 } ) } }
操场上的一些测试:
var x = MyTESTClass() x.lazyProp.value // Prints {Some 5} x.lazyProp.value = nil x.lazyProp._value // Prints nil x.lazyProp.value // Prints {Some 5}
缺点是您必须以x.lazyProp.value的形式访问实际的属性,而不能以x.lazyProp的形式访问.
以上是大佬教程为你收集整理的ios – 通过将属性设置为nil,在Swift中再次触发延迟初始化器全部内容,希望文章能够帮你解决ios – 通过将属性设置为nil,在Swift中再次触发延迟初始化器所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。