2016-04-08 52 views
3

P numaralı iletişim kuralıC sınıfının bir değişkenini gerektirir., Swift'i sınıflar protokol varyasyonlarını zorunlu olarak uyguluyor mu?

Sınıf X protokolü PC1C uzanan sınıf C1 değişken v ilan uygular. bu hata ile

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 şikayetleri::

Type 'X' does not conform to protocol 'P' 
Protocol requires property 'v' with type 'C' 
Candidate has non-matching type 'C1' 

Neden derleyici tam protokolde ilan aynı tür maç için beni zorluyor

İşte kod?

Düzenleme:

Obj C aynı uygulama hataları veya tam olarak uyacak şekilde zorluyor değildir uyarılar

@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 

cevap

1

olmadan derler, ancak çalışma zamanı sorunları önlemek için zorlamıyor. Kurulumunuz, P'a uygun olduğunu iddia eden ancak aslında uymayan bir başvuru göndermeniz anlamına gelebilir. Bunun nedeni, P'un v'u herhangi bir C olarak ayarlayabileceğini, ancak X'unnumaralı herhangi bir C1 için ayarlayabileceğini belirtir.

C, C2'un başka bir alt sınıfını oluşturmak ve bunu kullanmayı denerseniz, her şey parçalanacaktır.

Sana uygulanan veya protokolde varolmaya belirtilen özelliği sentezlenmiş değil şikayet etmek için obj-c örnek beklediğiniz

...

+0

Obj-C hiç şikayet, ama sadece ben değil protokolde kümenin, çalışma zamanında herkesin "v" yi bir "C" sınıfına ayarlayabileceği ve "X" in "C1" olduğu gibi "C" ye erişemediğini ifade eder. Cevap için teşekkürler. – Scakko