The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

Swiftでの複数にデリゲート multicast delegate

Swiftにはweak reference arrayがないので、NSHashTableを利用します

protocol SampleDelegate : class {
    func sampleDelegateDidFinish()
}
class SampleClass {
    let delegates = NSHashTable<AnyObject>() // AnyObjectをSampleDelegateにするとSwift3時点ではコンパイルに通らない

delegateを呼ぶとき

func someFunc() {
...
            delegates.objectEnumerator().enumerated()
                .map { $0.element as? SampleDelegate }
                .forEach { $0?.sampleDelegateDidFinish()) }
...
}