这并不是纯粹的好奇,有一种感觉,我可能误解了 Swift 中弱引用的一些内容。
假设我从视图控制器创建一个类并将其引用传递给初始化程序:
class = MyClass(vc: self)
由于情节提要和窗口已经保留对此视图控制器的引用,因此 MyClass 对它具有弱引用似乎是合乎逻辑的(出于类似的原因,默认情况下在 IB 中创建的所有引用都是弱引用):
class MyClass: NSObject {
private weak var viewController: UIViewController
init(vc: UIViewController) {
self.viewController = vc
super.init
}
func setViewController(_ vc: UIViewController) {
self.viewController = vc
}
...
}
但是,此代码会出现编译错误,因为 viewController 变量不是可选的。所以我必须添加“!” viewController 声明并删除初始化器,只留下setViewController
这看起来很不自然。
不允许非可选弱数据的原因是什么?
a 的定义本身就是weak
变量是变量不会增加对象的引用计数,更重要的是对于你的问题,变量的值将自动设置为nil
当引用的对象被释放时。
由于变量必须允许 nil 值,因此它必须是可选的。这就是为什么不允许使用非可选的弱变量。
不声明viewController
隐式展开(使用!
)。使其成为适当的选项(使用?
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)