Swift 中 Array 存放 Weak Reference 的兩個方法 - Relearning Note
Published in
Apr 10, 2021
使用額外的 Wrapper
以一個通用的 Weapper 來包裝目標,再以普通的 Array 來儲存。
class Weak<T: AnyObject> {
weak var value: T?
init (value: T) {
self.value = value
}
}// Example
var delegates = [Weak<UITextViewDelegate>]()// Add
weakDelgates.append(Weak(value: delegate))// Iterator
for dele in delegates {
dele.value?.textViewDidChange?(textView)
}
使用 NSHashTable.weakObjects
以通用的 NSHashTable 存放目標。
// Example
var delegates = NSHashTable<UITextViewDelegate>.weakObjects();// Add
delegates.add(delegate)// Iterator
for dele in delegates.allObjects {
dele.textViewDidChange?(textView)
}
使用範例可以參考 Swift MulticastDelegate