Swift 中 Array 存放 Weak Reference 的兩個方法 - Relearning Note

Terry Huang
安郡尼爾筆記
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

--

--

Terry Huang
安郡尼爾筆記

Co-Founder of LiRise Co.,Ltd. In charge of innovative affairs development. Tags: Guitar, Golf, Photograph, Cocktail, Dance, Diving, Travel.