2016-03-23 7 views
0

iOS 9.3のアップデートとSwift 2.2用の新しいアップデート(少なくともXcodeのアップデートの変更点に記載されています)の下で、以下のコードは私のためにはもう動作しません。Swift 2.2 AnyObject Type

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

を私はswift.orgに記述されている変更を経ていますが、私はそれの答えを見つけることができません。

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

は、それは述べて例外がスローされます。

答えて

1

className()は何をしているのですか? AnyClassの既知の方法ではありません。

これを解決できる方法はいくつかあります。

使用description()クラス名の文字列の説明を取得するには:

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

それとも、Objective-Cのタイプを使用している場合は、文字列からAnyClassを返すためにNSClassFromStringを使用することができます。

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

スイフト3:

dynamicTypeの名前がtype(of:)に変更されました。使用法:あなたはタイプのシステム自体に真のコンパイラのサポートを持っている場合

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

または

context[indexPath.row] is MyClass 
+0

ありがとうございました!その作品。私は、オブジェクトが "MyClass"型であるかどうかを確認したかったのですが、そうでなければ...コードを取得しましたが、なぜそれが何をしているのかわからない場合は、タイプはAnyObjectでした:) – Pentarex

3

なぜ文字列を気に?私が代わりにお勧め:

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

また、それはあなたが本当に意味あることはかなり可能性があります:

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

あなたは永遠に派生クラスを切り出すに熱心でない限り。

+0

チップをありがとう! :) – Pentarex

+0

「MyClass」への明示的な参照がない場合(リフレクションなどを使用している場合)、これは機能しません。しかし、これは文字列を切り捨てるので、よりクリーンです。 – JAL

関連する問題