Swift:协议扩展和数组

时间:2015-10-06 07:56:44

标签: arrays swift struct protocols

我有一些像这样的异构结构对象

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]数组的返回类型更改为[可选],则无法编译。

任何人都可以帮我吗?我想我在这里遗漏了一些东西。 感谢。

1 个答案:

答案 0 :(得分:2)

Map Cat array to Selectable array:

let selectableArray = catArray.map { $0 as Selectable }