以下是我的代码:
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 ...}
我错过了什么或者我误解了扩展吗?
解决方法 看起来亚历山大的答案是正确的.这是一个简化版本,不使用序列:protocol MySequence { associatedtype Iterator: IteratorProtocol func maakeIterator() -> Iterator}extension MySequence where Self.Iterator == Self,Self : IteratorProtocol { /// Returns an iterator over the elements of this sequence. func maakeIterator() -> Self { return self }}struct __IndexingIterator<Element>: MySequence,IteratorProtocol { mutating func next() -> Element? { return nil }}let iterator = __IndexingIterator<[String]>()iterator.maakeIterator()总结
以上是内存溢出为你收集整理的符合Swift中的Sequence和IteratorProtocol全部内容,希望文章能够帮你解决符合Swift中的Sequence和IteratorProtocol所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)