1
を動作しません。(いくつかのLIB)スウィフトでのファクトリメソッドとサブクラスObjective-Cのクラス、ジェネリック医薬品は、私はObjective-Cで書かれたファクトリメソッドで基本クラスを持っている
@interface Base : NSObject
@property(nonatomic, strong) NSString *content;
+ (instancetype)baseWithContent:(NSString *)content;
@end
//==================
@implementation Base
+ (instancetype)baseWithContent:(NSString *)content {
Base* base = [[Base alloc]init];
base.content = content;
return base;
}
@end
その後、私はそれをサブクラス化迅速かつANYOBJECTにそれをキャスト。(ブリッジング・ヘッダ部分を無視する)
class Child: Base {}
var c = Child(content: "Child")
print("before casting", type(of:c))
print("after casting", type(of:c as AnyObject))
で、それは鋳造後のベースとなっというこの奇妙な結果を取得します。私はObjective-Cのから生成され、利便性のイニシャライザをオーバーライドするために指定イニシャライザを使用する場合
before casting Optional<Child>
after casting Base
は実は、私は正しい結果を得ることができます。
class Child: Base {
init?(content:String) {
super.init()
self.content = content
}
}
before casting Optional<Child>
after casting Child
私は間違いをしますか?回答ありがとうございます。 私はXcodeバージョン8.1(8B62)とSwift 3.0.1を使用しています
ありがとうございます!そうですか。 "迅速な型宣言" ...どのようにObj-Cクラスを継承し、実装を変更せずにイニシャライザを使用できますか?私はサードパーティ製のlibなので実装を変更することはできません。 – Yang
タイプの問題、それは迅速なバグですか? – Yang
@Yang Nope、Objective-Cコードのバグです。サブクラス化したい場合は、そのメソッドを呼び出さないでください。 – Sulthan