2016-11-12 2 views
0

Mit Swift 3 mit XCode 8.1 (8B62)Objective-C typealias Vorrang vor Swift Klasse, die

Ich habe eine Klasse namens Category, die ich in einer anderen Klasse wie folgt verweisen: Foo(Category.self). Der Swift-Compiler gibt jedoch den folgenden Fehler: Generic parameter 'T' could not be inferred. Die Überprüfung der Klasse zeigt, dass Swift denkt, dass ich mich auf typealias Category - OpaquePointer beziehe, was einige eingebaute Typalias sind. Mehr Informationen zu den Typalien finden Sie hier: https://developer.apple.com/reference/objectivec/category.

Soweit ich verstehe, sollte der Compiler Symbole im aktuellen Modul bevorzugen. Wie zeige ich dem Compiler an, dass ich die Klasse in meinem Modul haben möchte? Dieser Code ist anscheinend in dem neusten Update zu XCode 8B62 gebrochen.

+0

@Rob danke für den Vorschlag, aber das hat auch nicht funktioniert. Ich habe herausgefunden, dass das Problem durch eine schlechte Konfliktauflösung verursacht wurde. In der Datei "project.pbxproj" fehlten Verweise, die dazu führten, dass der Compiler beim Erstellen die Datei ignorierte. Durch Entfernen und Hinzufügen der Datei behoben. – manwe858

Antwort

0

Dies stellte sich als Problem mit dem Projekt.pbxproj heraus. Bei einem vorherigen Zusammenführungskonflikt fehlten einige Referenzen, die den Compiler daran hinderten, die Symbole in der Datei zu erkennen. Ich musste den Verweis auf die Datei entfernen und sie erneut als neue Datei hinzufügen.

0

Versuchen Sie, schlagen diese mit einem anderen typealias der eigenen:

typealias MyCategory = Category 

Sie jetzt MyCategory statt Kategorie verwenden können, wo auch immer der Compiler Ihre Absicht falsch versteht. Natürlich können Sie immer noch Category verwenden, solange der Compiler weiß, was Sie wollen. Abgesehen davon würde ich vorschlagen, Typnamen in meinem Code zu vermeiden, die zu Objective-C/Swift-Schlüsselwörtern zu ähnlich sind.

Alternativ können Sie den Typnamen mit dem Namen des Ziels qualifizieren. Beispiel: Wenn Ihr Ziel (oder Modul) abc heißt, verwenden Sie abc.Category.

+0

Danke für die Antwort, aber das löst das Problem nicht, wenn ich meine 'Category' Klasse nicht in' MyCategory' umbenenne. Dies ist nicht etwas, was ich tun möchte, da dies mit dem Namensschema auf dem Backend übereinstimmen soll. Gibt es keine Möglichkeit, die Klasse anzugeben, die ich über die Syntax referenzieren möchte? – manwe858

Verwandte Themen