我只是在遵循迭代器模式,你能告诉我S.Iterator.Element下面的代码是什么意思 Int where Turn == S.Iterator.Element吗?
func computeScoreIncrement<S : Sequence>(_ pastTurnsReversed: S) -> Int where Turn == S.Iterator.Element {
var scoreIncrement: Int?
for turn in pastTurnsReversed {
if scoreIncrement == nil {
scoreIncrement = turn.matched! ? 1 : -1
break
}
}
//Turn is class name & nextScorer is protocol instance.
return (scoreIncrement ?? 0) + (nextScorer?.computeScoreIncrement(pastTurnsReversed) ?? 0)
}
Run Code Online (Sandbox Code Playgroud)
Iterator.Element在这里最容易理解。泛型参数S必须是符合 的类型Sequence,正如您在此处指定的那样:
func computeScoreIncrement<S : Sequence>(_ pastTurnsReversed: S) -> Int
// ^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
因此,S.Iterator.Element指的是序列的类型S。例如,如果S推断为[Int],则S.Iterator.Element是Int-[Int]是 的序列Int。
现在到where Turn == S.Iterator.Element零件上。
如上所述,S必须是符合 的类型Sequence,但这不是所有的约束!S.Iterator.Element还必须是相同的类型Turn。您没有显示如何Turn定义。它可以是封闭类、类、结构或枚举的泛型参数。
因此,我可以将 a 传递[Turn]给此方法,传递给作为Turns序列的其他类型的实例。
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |