2017-08-11 98 views
0

我只是遵循迭代器模式,你能告訴我什麼是S.Iterator.Element在下面的代碼&什麼意思是Int where Turn == S.Iterator.Elementswift中的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) 
    } 

回答

3

Iterator.Element是這裏最容易理解的。泛型參數S必須符合Sequence一個類型,因爲你已經在這裏指定:

func computeScoreIncrement<S : Sequence>(_ pastTurnsReversed: S) -> Int 
//      ^^^^^^^^^^^^^^ 

因此,S.Iterator.Element指的是序列的類型S是。如果假設S被推斷爲[Int],則S.Iterator.ElementInt-[Int]Int的序列。

現在進入where Turn == S.Iterator.Element部分。

如上所述,S必須是符合Sequence的類型,但這不是所有的約束! S.Iterator.Element也必須是相同類型爲Turn。你沒有說明如何定義Turn。它可能是封閉類,類,結構或枚舉的通用參數。

因此,我可以將[Turn]傳遞給此方法,以將某個其他類型的實例傳遞給Turn s。

+0

謝謝!很好的解釋。 – Amit

相關問題