簡體   English   中英

協議中的Swift協議屬性 - 候選者具有非匹配類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM