gpt4 book ai didi

swift - 符合 Swift 中的 Sequence 和 IteratorProtocol

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:32 25 4
gpt4 key购买 nike

我正在尝试编写我自己的 IndexingIterator 版本以增加我对 Sequence 的理解。我没有在我的结构中为 associatetype Iterator 分配任何类型。然而,编译器并没有对此提示,我得到了 makeIterator 的默认实现。

以下是我的代码:

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
...
}

我是不是漏掉了什么或者我误解了扩展?

最佳答案

看起来 Alexander 的回答是正确的。这是一个未使用 Sequence 的简化版本:

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 - 符合 Swift 中的 Sequence 和 IteratorProtocol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40669539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com