当 Element 是元组时扩展数组受约束

the*_*end 5 arrays generics swift swift2

当元素是元组类型时,有没有办法扩展数组?

public extension Array where Element: (timeZoneName: String, formattedName: String){

}
Run Code Online (Sandbox Code Playgroud)

此声明返回 4 个错误:

  • 语句不能以闭包表达式开头
  • 大括号块语句是一个未使用的闭包
  • 扩展中应为“{”
  • 类型名称的预期标识符

我不知道显示的错误是否准确。有任何想法吗?

tim*_*mbo 1

您不能添加特定类型,extension Array where Element == Int因为这会将通用数组转换为非通用版本。

你会看到类似的错误same-type requirement makes generic parameter 'Element' non-generic

编辑

它实际上看起来确实合法(至少在 Swift 2.2 中):

typealias tzTuple = (timeZoneName: String, formattedName: String)

扩展数组,其中元素:tzTuple {

}

不过,您必须看看这在运行时是否有效。

我在 Playground 中检查了这一点,目前 Playgrounds 尚未完全支持 Swift 2.2-dev

我建议这样做:

typealias tzTuple = (timeZoneName: String, formattedName: String)

扩展数组 {

  func formattedName(index: Int) -> 字符串?{
    如果 self[index] 是 tzTuple {
      return (self[index] as!tzTuple).formattedName
    }
    返回零
  }
}

会让你做

let foo = [(timezoneName: "PST", formattedName: "太平洋标准时间"),(timezoneName: "AEST", formattedName: "澳大利亚东部时间")]
打印(foo.formattedName(0))