1
super.init()
が呼び出される前に、イニシャライザ内の動的な型のクラスにアクセスしたいと思います。私はそれが不可能だと思う。しかし、動的クラスは、スーパークラスの中でコンパイル時に知るべきものです。 Swiftコンパイラがアクセス権を与えないものです。または方法がありますか?Swift 3でsuper.initより前の動的型にアクセスする方法
typealias JSONDict = [String: Any]
class BaseItem: NSObject {
class var apiName: String { return "n/a" }
init?(json: JSONDict) {
// I need to access dynamic type before super.init().
// I can only access current type statically.
print("api name before: " + BaseItem.apiName)
// Prints "n/a", I need it to print "book".
super.init()
// This correctly prints "book".
print("api name: " + type(of: self).apiName)
}
}
class Book: BaseItem {
override class var apiName: String { return "book" }
}
let b = Book(json: [:])
このサンプルコードは、遊び場にコピーすることができます。
うわー!自分のプロジェクトで初期化され、サンプルの遊び場で試してみる前に、自分で警告を見たことを誓っています。私はプロジェクトでそれを試して、それは動作します。それとも、私はそれを試すことさえしないかもしれません。なぜなら私の脳はあなたが生まれる前に自己を使うことができないことを知っているからです。私は馬鹿だと感じる。答えをありがとう! –