2017-01-26 1 views
5

Das Hinzufügen mehrerer Delegaten anstelle von nur einem ist eine ziemlich häufige Aufgabe. Angenommen, wir haben Protokoll und eine Klasse:Verwenden von NSHashTable zum Implementieren des Beobachtermusters in Swift 3

protocol ObserverProtocol 
{ 
    ... 
} 

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

Wenn wir versuchen, ObserverProtocol zu zwingen AnyObject Protokoll zu entsprechen, werden wir einen weiteren Fehler:

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

Ist es überhaupt möglich, eine Reihe von schwachen Delegierten zu schaffen in Swift 3.0?

Antwort

6

Sicher, es ist möglich.

AnyObject ist der Swift-Äquivalent von id in Objective C. Code zu kompilieren, müssen Sie nur die @objc Anmerkung zu Ihrem Protokoll hinzufügen, Swift zu sagen, dass das Protokoll mit Objective C.

kompatibel sein sollte

Also:

@objc protocol ObserverProtocol { 

} 
Verwandte Themen