是否有可能在弱引用的Swift 4元组中创建?
这样的事情:
let x: (name: weak MyClass, name2: weak MyClass2)
答案 0 :(得分:6)
首先,弱变量必须是Optional
。
其次,正如 @Hamish 在评论中所说,你不能将元组字段定义为弱。
但是,如果你真的想使用元组,这是一个解决方法
第1步让我们定义一个包含弱内容对象的包装器
struct WeakWrapper<Element:AnyObject> {
weak var value:Element?
init(_ value:Element) {
self.value = value
}
}
第2步您的2个课程
class MyClass1 {
deinit {
debugPrint("Deinit MyClass1")
}
}
class MyClass2 {
deinit {
debugPrint("Deinit MyClass1")
}
}
第3步这就是我们定义元组的方法
let x: (name0: WeakWrapper<MyClass1>, name1: WeakWrapper<MyClass2>)
第4步这就是我们填充它的方式
x = (name0: WeakWrapper(MyClass1()), name1:WeakWrapper(MyClass2()))
第5步我们创建的MyClass1和MyClass2类型的对象对象将在下一行解除分配,因为没有对它们的强引用
"Deinit MyClass1"
"Deinit MyClass1"