夫特:协议扩展和数组
问题描述:
我有异类这样夫特:协议扩展和数组
struct Cat: Hashable {
let name: String
let catId: Int
}
struct SubCat: Hashable {
let name: String
let catId: Int
let parentCatId: Int
}
现在我有一个的tableView需要或者显示猫或SUBCAT一些结构对象。我的第一个选择是两班,协议扩展:
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]数组的返回类型更改为[可选],则不会编译。
任何人都可以帮助我吗?我想我在这里错过了一些东西。 谢谢。
答
地图Cat
阵列到阵列Selectable
:
let selectableArray = catArray.map { $0 as Selectable }
+0
谢谢:)正如Martin R.所说,它像一个魅力一样工作! – Khal
我看你投它,当你设置你的阵列,通过测试协议。像这样: 'if let selectableArray = catArray as?可选{} 让我知道它是否可以帮助您 – jlngdt
我已经尝试过。编译器说Selectable不是Cat的子类型: -/ – Khal
哦,是的,cat是一个结构体,也许通过创建它而不是类? – jlngdt