我有一些像这样的异构结构对象
struct Cat: Hashable {
let name: String
let catId: Int
}
struct SubCat: Hashable {
let name: String
let catId: Int
let parentCatId: Int
}
现在我有一个需要显示Cat或SubCat的tableView。我的第一选择是使用协议扩展这两个类:
protocol Selectable {
func asString() -> String
}
我的结构变成了:
struct Cat: Hashable, Selectable {
let name: String
let catId: Int
func asString() -> {
return self.name
}
}
struct SubCat: Hashable, Selectable {
let name: String
let catId: Int
let parentCatId: Int
func asString() -> {
return self.name
}
}
到目前为止一直有效。 我在TableViewController中声明了一个[Selectable]对象,使用asString()来填充我的单元格。编译就像一个魅力。
但事情就是这样。我有一个CatModel类和一个SubCatModel类,每个类返回一个每个结构的数组[Cats]和[SubCats] 当我尝试将[Cat]数组分配给[Selectable]数组时,它不会编译。如果我将[Cat]数组的返回类型更改为[可选],则无法编译。
任何人都可以帮我吗?我想我在这里遗漏了一些东西。 感谢。
答案 0 :(得分:2)
Map Cat
array to Selectable
array:
let selectableArray = catArray.map { $0 as Selectable }