J'essaye d'écrire ma propre version de IndexingIterator
pour augmenter ma compréhension de Sequence
. Je n'ai assigné aucun type à Iterator associatetype dans ma structure. Cependant, le compilateur ne s'en plaint pas et j'obtiens une implémentation par défaut de makeIterator
.conforme à Sequence et IteratorProtocol dans Swift
Voici mes codes:
struct __IndexingIterator<Elements: IndexableBase>: Sequence, IteratorProtocol {
mutating func next() -> Elements._Element? {
return nil
}
}
let iterator = __IndexingIterator<[String]>()
// this works and returns an instance of __IndexingIterator<Array<String>>. why?
iterator.makeIterator()
Je pense qu'il doit y avoir des extensions sur Sequence
qui ajoutent l'implémentation par défaut. Ainsi, je l'ai cherché dans Sequence.swift
et seulement trouvé cela.
extension Sequence where Self.Iterator == Self, Self : IteratorProtocol {
/// Returns an iterator over the elements of this sequence.
public func makeIterator() -> Self {
return self
}
}
je pensais que ce serait comme ça:
extension Sequence where Self: IteratorProtocol {
typealias Iterator = Self
...
}
Ai-je raté quelque chose ou je mal compris l'extension?
Quelqu'un peut-il aider? – Evan