Для протокола P
требуется переменная v
класса C
.
Класс X
реализует протокол P
, объявляя переменную v
класса C1
, где C1
расширяет C
.
Вот код:
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