[英]Swift protocol property in protocol - Candidate has non-matching type
我有一個協議(ProtocolA)包含一個符合第二個協議(ProtocolB)的屬性。
public protocol ProtocolA {
var prop: ProtocolB? { get }
}
public protocol ProtocolB {
}
我正在嘗試聲明兩個將實現這些的類:
private class ClassA : ProtocolA {
var prop: ClassB?
}
private class ClassB : ProtocolB {
}
但是我收到一個錯誤:
類型'ClassA'不符合協議'ProtocolA'
協議要求屬性'prop'的類型為'ProtocolB?'
候選人有不匹配類型'ClassB?'
由於ClassB符合ProtocolB,這很煩人。
在古老的我可能只是聲明財產:
@property (nonatomic) ClassB <ProtocolB> *prop;
但似乎我能在swift中解決這個問題的唯一方法就是添加一個像以下一樣的ivar:
private class ClassA : ProtocolA {
var _prop: ClassB?
var prop: ProtocolB? { return _prop }
}
有沒有辦法解決這個問題?
您需要聲明一個typealias
符合其它協議的類型。 你這樣做的方式是prop
必須完全屬於ProtocolB
類型,但你實際上並不想要它,你想要一個符合它的類型。
protocol ProtocolA {
typealias Prop : ProtocolB
var prop: Prop? { get }
}
protocol ProtocolB {}
class ClassA : ProtocolA {
var prop: ClassB?
}
class ClassB : ProtocolB {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.