2016-07-18 10 views
1

私はこれをやりたい:AnyClassオブジェクトをas?

let myClass: AnyClass = functionReturningClass() // ex. String.self 
if let myObject = functionReturningObject() as? myClass { ... 

as? myClassは( 'MyClassのはタイプではありません')コンパイルされません。私に何ができる?

+1

あなたは何をすべきですか? –

+0

そこにあるコードでは、myClassは定数の名前です。最初のコード行には「myClassという名前の定数があり、それは任意のオブジェクト型であり、その値はfunctionReturningClass()から返されるものによって与えられます」 –

+0

サブクラスが異なるタイプを提供しようとしています – andrewz

答えて

0

残念ながら、これは不可能です。asは、コンパイル時にキャストする型を知っていなければなりません。可変タイプをasに指定することはできません。キャストする必要がある場合は、コンパイル時にジェネリックやオーバーロードなどの機能に限定されます。

考えてみましょう - コンパイラはどのような方法で結果を呼び出すことができますかmyObject?ランタイム値myClassを知らずに言うことは不可能です。したがって、これはうまくいきません。

functionReturningObject()からサブクラスを返すことはできます。それでもさまざまなタイプにキャストすることができます。実行時に動的に型をキャストする型を決定できません。