2016-10-18 1 views
1

Ich habe eine Methode, die erklärt, wie es in Objective-C folgtObjective-C-Klasse-Methode mit generischen Parameter kann nicht in Swift genannt werden

+(void) clearAll:(NSArray<ParameterType> *)values; 

ich eine andere Klasse Methode, die wie folgt deklariert wird, in einem anderen Objekt

+(NSArray *) values; 

ich versuche, diese von Swift zu nennen wie folgt:

MyObject.clearAll(MyOtherObject.values()) 

Es zeigt eine arr verschiedene Kompilierungsfehler, wenn ich versuche, sie auszuführen.

Die Fehler sind:

"Generic parameter 'ObjectType' could not be inferred" 

dann versuche ich MyObject.clearAll(MyOtherObject.values() as NSArray<MyOtherObject>)

und "Cannot specialize non-generic type 'NSArray'"

bekommen Wenn ich MyObject.clearAll (MyOtherObject.values ​​() als Array!)

versuchen Ich bekomme "Array<MyOtherObject> is not convertible to [Any]"

Wie kann ich das beheben?

Antwort

0

Die Compilerfehler sind in dieser Situation äußerst hilfreich; Sie zeigen ziemlich überall, außer dem richtigen Ort. Das Problem liegt am generischen Parameter MyObject: In Swift ist ein unspezialisierter generischer Typ keine Sache für sich, und Methoden können nicht darauf aufgerufen werden. Es muss darauf spezialisiert sein, konkret zu werden.

Die Auflösung ist einfach: nur die Art Argument hinzufügen: (. Sie werden das gleiche für MyOtherObject tun müssen, wenn es zu allgemein ist)

MyObject<MyOtherObject>.clearAll(MyOtherObject.values()) 

Verwandte Themen