Swift:元组中的“弱”引用

时间:2018-03-29 11:09:59

标签: swift

是否有可能在弱引用的Swift 4元组中创建?

这样的事情:

let x: (name: weak MyClass, name2: weak MyClass2)

1 个答案:

答案 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"