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()) } ... }