gpt4 book ai didi

协议(protocol)中的 Swift 协议(protocol)属性 - 候选人具有不匹配的类型

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:29 31 4
gpt4 key购买 nike

我有一个协议(protocol) (ProtocolA),其中包含符合第二个协议(protocol) (ProtocolB) 的单个属性。

public protocol ProtocolA {        
var prop: ProtocolB? { get }
}

public protocol ProtocolB {
}

我正在尝试声明两个将实现这些的类:

private class ClassA : ProtocolA {    
var prop: ClassB?
}

private class ClassB : ProtocolB {
}

但是我得到一个错误:

Type 'ClassA' does not conform to protocol 'ProtocolA'

Protocol requires property 'prop' with type 'ProtocolB?'

Candidate has non-matching type 'ClassB?'

这很烦人,因为 ClassB 符合 ProtocolB。

在过去,我可能只是将属性声明为:

@property (nonatomic) ClassB <ProtocolB> *prop;

但似乎我可以快速解决这个问题的唯一方法是添加一个像这样的ivar:

private class ClassA : ProtocolA {        
var _prop: ClassB?
var prop: ProtocolB? { return _prop }
}

有没有办法解决这个问题?

最佳答案

您需要声明一个符合其他协议(protocol)的类型的typealias。你这样做的方式是 prop 必须完全是 ProtocolB 类型,但你实际上并不想要那个,你想要一个符合它的类型。

protocol ProtocolA {
typealias Prop : ProtocolB
var prop: Prop? { get }
}

protocol ProtocolB {}


class ClassA : ProtocolA {
var prop: ClassB?
}

class ClassB : ProtocolB {}

关于协议(protocol)中的 Swift 协议(protocol)属性 - 候选人具有不匹配的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355689/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com