1
Swift 3.1 deprecates initialize(). How can I achieve the same thing?と同じ問題に遭遇しました@ジョーダンスミスのソリューションは非常に印象的です、私は実装に興味があったが、実際にいくつかのトラブルに会った、ここでいくつかのキーコードは、コメントを参照してくださいなぜログ機能UIViewController
呼び出されていない、プロトコルに準拠しています。 UIViewController
がキャッチしかしT == UIViewController.self
がfalse
あるた理由:迅速なタイプ判定について混乱していますか?
protocol Conscious {
static func awake()
}
/** extension */
extension UIViewController: Conscious {
static func awake() {
if self == UIViewController.self {
print(self, #function) // never came here, but seems should come
}
}
}
/** main */
private static let _operation: Void = {
let typeCount = Int(objc_getClassList(nil, 0))
let types = UnsafeMutablePointer<AnyClass?>.allocate(capacity: typeCount)
let autoreleasingTypes = AutoreleasingUnsafeMutablePointer<AnyClass?>(types)
objc_getClassList(autoreleasingTypes, Int32(typeCount))
for index in 0 ..< typeCount {
(types[index] as? Conscious.Type)?.awake()
let T = types[index]!
let vc = UIViewController()
print(T, vc.isKind(of: T), T == UIViewController.self)
/*
Strange things:
UIResponder true false
UIViewController true false(why is false)
UISearchController false false
*/
}
types.deallocate(capacity: typeCount)
}()
ご質問はありますか? – rmaddy
@rmaddy申し訳ありませんが、コード内のコメントを参照してください – quentinjin
OK、もう一度、あなたは何ですか? – rmaddy