swift 中的 iterator.element 是什么?

Ami*_*mit 0 iterator swift

我只是在遵循迭代器模式,你能告诉我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)

Swe*_*per 5

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.ElementInt-[Int]是 的序列Int

现在到where Turn == S.Iterator.Element零件上。

如上所述,S必须是符合 的类型Sequence,但这不是所有的约束!S.Iterator.Element还必须是相同的类型Turn。您没有显示如何Turn定义。它可以是封闭类、类、结构或枚举的泛型参数。

因此,我可以将 a 传递[Turn]给此方法,传递给作为Turns序列的其他类型的实例。