2017-01-26 15 views
5

Dodawanie wielu uczestników zamiast jednego jest dość powszechnym zadaniem. Załóżmy, że mamy protokół i klasę:Używanie NSHashTable do implementacji wzorca obserwatora w Swift 3

protocol ObserverProtocol 
{ 
    ... 
} 

class BroadcasterClass 
{ 
    // Error: Type 'ObserverProtocol' does not conform to protocol 'AnyObject' 
    private var _observers = NSHashTable<ObserverProtocol>.weakObjects() 
} 

Jeśli staramy się zmusić ObserverProtocol celu dostosowania protokołu AnyObject poznamy kolejny błąd:

Using 'ObserverProtocol' as a concrete type conforming to protocol 'AnyObject' is not supported

Czy to w ogóle możliwe, aby stworzyć zestaw słabych delegatów w Swift 3.0?

Odpowiedz

6

Oczywiście, jest to możliwe.

AnyObject jest Swift odpowiednik id w Objective C. Aby otrzymać kod do kompilacji, wystarczy dodać @objc adnotację do protokołu Swift powiedzieć, że protokół powinien być zgodny z Objective C

A więc:

@objc protocol ObserverProtocol { 

}