2016-09-28 1 views
1

Die folgende Zeile mir den Compiler Fehler geben „generic Parameter‚KeyType‘nicht geschlossen werden kann“:NSMapTable „Generic Parameter‚KeyType‘nicht geschlossen werden kann“

fileprivate var delegatesMap = NSMapTable.strongToWeakObjects() 

Ich versuche noch deutlicher zu sein, indem er sagte :

fileprivate var delegatesMap:MapTable<Key,Value> = NSMapTable.strongToWeakObjects() 

Aber ich Xcode ist dann nicht erkennen "Key"

Wie gehe ich über diese Fixierung?

EDIT: Ich würde meinen Key gerne vom Typ String sein und mein Wert vom Typ MenuActionDelegate (Klasse-Protokoll)

+0

Nein nur Swift, aber auch ich sehe nicht, was KeyType Sie verwenden möchten. Welche Typen möchten Sie als KeyType und ValueType für Ihre 'NSMapTable' verwenden? – OOPer

+0

Ich möchte String für Schlüssel und ein Protokoll "MenuActionDelegate" als Wert verwenden –

+0

Sie sollten diese Art von Informationen besser in Ihre Frage aufnehmen. Ich werde eine kurze Antwort schreiben. – OOPer

Antwort

0

Sie müssen sein, um so etwas schreiben:

fileprivate var delegatesMap = NSMapTable<NSString, MenuActionDelegate>.strongToWeakObjects() 

Die generische Parameter KeyType und ValueType müssen AnyObject sein, so dass Sie String dort nicht direkt setzen können, benötigen Sie auch explizite Casting as NSString.

Und der Werttyp MenuActionDelegate benötigt ein @objc -Protokoll. Oder aber Sie müssen möglicherweise etwas schreiben:

var delegatesMap = NSMapTable<NSString, AnyObject>.strongToWeakObjects() 

Und verwenden Sie es als:

let theDelegate = delegatesMap.object(forKey: "delegateName" as NSString) as! MenuActionDelegate 
+0

Es ist ein Klassenprotokoll, aber ich bekomme einen Fehler, der sagt "MenuActionDelegate als konkreter Typ konfrontiert mit Protokoll 'AnyObject' wird nicht unterstützt" –

+0

@FaisalSyed, habe ich verpasst, für das Klassenprotokoll zu überprüfen. Kannst du es ein '@ objc'-Protokoll ändern? – OOPer

+0

Ich kann das nicht tun. Wie genau würde ich explizites Casting als NSString hinzufügen? Ich habe mehrere Möglichkeiten ausprobiert, aber nicht in der Lage, es richtig zu tun –

Verwandte Themen