私はIndexingIterator
という自分のバージョンを書いて、Sequence
を理解しています。私は私の構造体でassociatetype Iteratorに型を割り当てていません。しかし、コンパイラはそれについて不平を言っておらず、私はmakeIterator
のデフォルト実装を得ています。続きSwiftのSequence and IteratorProtocolに準拠
は私のコードです:
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()
私は、デフォルトの実装を追加Sequence
上のいくつかの拡張機能がなければならないと思います。したがって、私はSequence.swift
でそれを検索し、これだけが見つかりました。
extension Sequence where Self.Iterator == Self, Self : IteratorProtocol {
/// Returns an iterator over the elements of this sequence.
public func makeIterator() -> Self {
return self
}
}
私はそれがこのようなことだろうと思った:
extension Sequence where Self: IteratorProtocol {
typealias Iterator = Self
...
}
は、私が何かを逃したのか、私は拡張子を誤解しましたか?
誰でも手助けできます。 – Evan