是什么意思:Separator.Iterator.Element == Self.Iterator.Element.Iterator.Element

时间:2017-02-15 11:46:41

标签: swift swift3

含义是什么:

Separator.Iterator.Element == Self.Iterator.Element.Iterator.Element

this(Swift标准库)swift实例方法声明中?

func joined<Separator>(separator: Separator) -> 
JoinedSequence<Array<Element>> where Separator : Sequence, 
Separator.Iterator.Element == Self.Iterator.Element.Iterator.Element

以下是Apple的例子:

let nestedNumbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let joined = nestedNumbers.joined(separator: [-1, -2])
print(Array(joined))
// Prints "[1, 2, 3, -1, -2, 4, 5, 6, -1, -2, 7, 8, 9]"

1 个答案:

答案 0 :(得分:2)

joined(separator:)可用于调用序列序列:

extension Sequence where Iterator.Element : Sequence {

  // ...

  public func joined<Separator : Sequence>(separator: Separator) -> JoinedSequence<Self>
    where Separator.Iterator.Element == Iterator.Element.Iterator.Element
}

它需要一个separator:参数,它本身必须是一个序列。约束Separator.Iterator.Element == Iterator.Element.Iterator.Element只是意味着分隔符的元素类型必须与调用joined(separator)的序列的内部元素类型相同。

例如,您在[[Int]]上调用它。它的Iterator.Element.Iterator.Element(数组元素类型的元素类型)是Int。因此,您使用的分隔符必须是Int s的序列,[Int]是。

尝试传递[String]作为分隔符 - 由于StringInt,您将收到编译错误,因此无法满足要求{{ 1}}。