2016-03-23 1 views
0

Nach dem Update von iOS 9.3 und dem neuen Update für Swift 2.2 (zumindest wurde das in den Xcode Update-Änderungen angegeben) funktioniert der folgende Code nicht mehr für mich.Swift 2.2 AnyObject Typ

if context[indexPath.row].dynamicType.className() == "MyClass" 

es löst eine Ausnahme in dem es heißt:

Value of type 'AnyObject.Type' has no member 'className' 

ich durch die Änderungen werde, die in swift.org beschrieben sind, aber ich die Antwort davon nicht finden kann.

Antwort

1

Ich weiß nicht, was className() tut. Es ist keine bekannte Methode auf AnyClass.

Es gibt ein paar Möglichkeiten, wie Sie das beheben können.

Verwenden description() eine String Beschreibung des Klassennamen erhalten:

if context[indexPath.row].dynamicType.description() == "MyClass" { 
    // ... 
} 

Oder wenn Sie Objective-C-Typen verwenden können Sie NSClassFromString verwenden, um eine AnyClass aus einem String zurück:

if context[indexPath.row].dynamicType == NSClassFromString("MyClass") { 
    // ... 
} 

Swift 3:

dynamicType wurde in type(of:) umbenannt. Verbrauch:

type(of: context[indexPath.row]) == MyClass.self 

oder

context[indexPath.row] is MyClass 
+0

Vielen Dank! Es funktioniert. Ich wollte sicherstellen, ob das Objekt vom Typ "MyClass" ist oder wenn nicht ... Sie erhalten den Code, aber ich habe keine Ahnung, warum es vorher funktionierte, wenn Sie nicht wissen, was es tut: D Mein Objekt Typ war AnyObject :) – Pentarex

3

Warum bei Strings Mühe, wenn Sie eine echte Compiler-Unterstützung in der Art System selbst haben? Ich empfehle stattdessen:

if context[indexPath.row].dynamicType == MyClass.Type.self { 
    // ... 
} 

Außerdem ist es ziemlich wahrscheinlich, dass Sie wirklich bedeuten:

if let cell = context[indexPath.row] as? MyClass { 
    // ... 
} 

es sei denn, Sie abgeleitete Klassen Absicht sind immer auf Ausschneiden.

+0

Danke für den Tipp! :) – Pentarex

+0

Dies funktioniert nicht, wenn Sie keinen expliziten Verweis auf 'MyClass' haben (mit Reflection, etc.) Aber ja, das ist sauberer, da es die Strings ausschneidet. – JAL