所以我正在构造一个Foo对象,这个具体的Foo对象有一个bar2,它是一个Bar。该栏符合BarProt协议,但仍然无法识别。我该怎么办?在这种情况下,我需要var2与Bar兼容。
原因:我有很多种类的Bar,它们略有不同,我试图找到提取到BarProt中的最低公分母,以便我可以重用逻辑来处理类似Bar的对象。
(我基本上是根据bar对象的属性进行各种查找,并希望为BarProt创建通用解析器,然后在其他地方处理具体信息)。
protocol BarProt {
var bar: String {get}
}
struct Bar: BarProt {
var bar: String
}
protocol FooProt {
var var1: String {get}
var var2: BarProt {get}
}
struct Foo: FooProt {
let var1: String
let var2: Bar // I'm required to change it to BarType, but I really don't want to, since Bar contains so much more that BarType
}
let barInstance = Bar(bar: "Hello")
print(Foo(var1: "String", var2: barInstance))
错误:
protocol requires property 'var2' with type 'BarProt'; do you want to add a stub?
var var2: BarProt
答案 0 :(得分:0)
var2
必须为BarProt
。这对您有用吗?
protocol BarProt {
var bar: String {get}
}
struct Bar: BarProt {
var bar: String
}
protocol FooProt {
var var1: String {get}
var var2: BarProt { get }
}
struct Foo: FooProt {
var var2: BarProt
let var1: String
}
let barInstance = Bar(bar: "Hello")
print(Foo(var2: barInstance, var1: "String"))
答案 1 :(得分:0)
在这里
struct Foo: FooProt {
let var1: String
let var2: Bar
}
var2
不符合FooProt
协议,请用BarProt替换其类型。
此外,协议中的属性必须具有显式的get
或get set
指定符,因此请为协议中的每个属性添加一个指定符。