Swift无法识别类型并引发错误

时间:2019-06-11 14:51:14

标签: swift

所以我正在构造一个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

2 个答案:

答案 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替换其类型。

此外,协议中的属性必须具有显式的getget set指定符,因此请为协议中的每个属性添加一个指定符。