gpt4 book ai didi

swift - Swift 中的迭代器

转载 作者:搜寻专家 更新时间:2023-11-01 07:00:05 25 4
gpt4 key购买 nike

我正在用 swift 写一个 trie。我在 java 中编写了相同的代码,我接受了一个 Iterator<Int> 的实例。作为参数来指定 trie 元素的位置。

在 swift 中我找不到相同的简单界面。表格

public func put(path: Iterator<Int>) {...}

public func put(path: IteratorProtocol<Int>) {...}

给我编译错误,所以我目前正在使用

public func put(path: AnyIterator<Int>) {...}

但这看起来很难看,并迫使调用者创建一个额外的任意对象。有没有更好的办法?我无法相信 swift 没有优雅的习语.....我就是找不到它。

最佳答案

迭代器的等价物是序列。

func put<S: Sequence>(path: S) where S.Element == Int

如果您不关心元素的类型,当然不需要 where 子句。

通常一个 trie 本身在它自己的元素上是通用的,所以它会是这样的

struct Trie<Element: Comparable> {
func put<S: Sequence>(path: S) where S.Element == Element { ... }
}

如果你真的想直接接受迭代器,你可以,但这种情况很少见。它将沿着这些方向:

func put<I: IteratorProtocol>(path: inout I) where I.Element == Int

要直接使用迭代器,您需要修改它,这意味着您需要它是inout(或者您可以返回它的一个副本,但可能很危险,因为推进多个迭代器的副本未定义)。不过,这确实很不寻常。您可能指的是 Sequence

关于swift - Swift 中的迭代器<Int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352212/

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