3
プロトコルP
は、クラスC
の変数v
を必要とします。は、プロトコルバールでClassを厳密に強制していますか?
クラスX
はC1
がC
を拡張するクラスC1
の可変v
を宣言プロトコルP
を実装します。このエラーと
import Foundation
class C { }
class C1: C { }
protocol P {
var v: C { get set }
}
class X: P {
var v: C1
init(withV v: C1) {
self.v = v
}
}
Xcodeの苦情:
Type 'X' does not conform to protocol 'P'
Protocol requires property 'v' with type 'C'
Candidate has non-matching type 'C1'
はなぜコンパイラは、プロトコルで宣言され、まったく同じタイプに一致するように私を強制され
ここでは、コードですか?
編集:OBJの-Cで正確に同じ実装では、エラーや警告
@interface C: NSObject
@end
@implementation C
@end
@interface C1: C
@end
@implementation C1
@end
@protocol P <NSObject>
@property (nonatomic, strong) C *v;
@end
@interface X: NSObject <P>
@property (nonatomic, strong) C1 *v;
@end
@implementation X
@end
のObj-Cは全く文句が、ちょうど私はありませんプロトコルのセットは実行時に誰もが 'v'を' C'クラスに設定でき、 'X'は' C'のように 'C'にアクセスできないことを意味しています。答えをありがとう。 – Scakko