効果的に、クラスに渡すことができるメタタイプ(例:Type.Type)を返すプロトコルを持っていて、必要なときにオブジェクトをキャストしたいそのメタタイプに私がそれをキャストする理由は、それがtableViewデキュー機能で使用され、割り当てられたタイプにキャストしたいからです。Swiftのメタタイプへの格納とキャスト
この要約版(以下の完全版)を検討してください。
let anyObject: AnyObject = anything()
let aType = type.type() // aType here is A.Type
if let newType = anyObject as? aType {
print(newType)
}
// error: 'aType' is not a type
私はaType.init()を使って初期化することができるので、これは型ではないのはなぜ混乱していますか?
完全なサンプルコードは以下のとおりです(そして、プレイグラウンドで実行することはOKです)。
import UIKit
protocol P {
func type() -> A.Type
}
class A {
}
class B: A {
}
class C: A {
}
struct BData: P {
func type() -> A.Type {
return B.self
}
}
struct Foo {
let type: P
init(p: P) {
self.type = p
}
func create() {
let anyObject: AnyObject = anything()
let typeType = type.type()
if let newType = anyObject as? typeType {
print(newType)
}
}
func anything() -> AnyObject {
return B()
}
}
let data = BData()
let foo = Foo(p: data)
遊び場の実行に失敗しました:MyPlayground.playground:43:44:エラー: 'typeType' とタイプ あれば聞かせてNEWTYPE = ANYOBJECTではないでしょうか?タイプタイプ{
のAw: '( なぜ幸い、あなたは言うでしょう – chillok
@cilkを、まあ、私は、あなたのために別の答えを持っている男:) http://stackoverflow.com/a/1517670/2463616 – pacification
ええああ、?けっこうだ。私が安全でないことを望むまで、安全のために素晴らしい。あなたは別の解決策にアプローチしましたか? – chillok