gpt4 book ai didi

swift - 为什么我不能在 Range 扩展中循环 self?

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:02 24 4
gpt4 key购买 nike

我有这个扩展:

extension Range {
func foo() { // called with (0..<5).foo()

let bar = 0..<5

print(bar) // 0..<5
print(self) // 0..<5

print(type(of: bar)) // Range<Int>
print(type(of: self)) // Range<Int>

for i in bar { // :)

}

for j in self { // :(

}
}
}

出于某种原因,第一个循环没问题,但第二个循环不行。我得到一个编译时错误说

Type 'Bound' does not conform to protocol 'Strideable'  

这里还需要注意的一点是,将 bar 赋值给 self 会导致错误在第一个循环中弹出。

最佳答案

向编译器明确说明 BoundStrideable :

extension Range where Element: Strideable {
...
}

定义一个Range只需要BoundComparable。查看实际实现here . Comparable 是定义一个Range 的最低要求。

有两种类型的范围:

  • CoutableRange:这些是符合 Strideable 并在元素之间使用整数步长的类型 (Bound) 范围。这些范围被视为一个 Sequence,因此可以在 for 循环中使用。

  • Normal 范围:这些包括仅包含 Comparable 元素的 RangeClosedRange,因此可以' 被迭代。

这在 this 中明确给出评论。

关于swift - 为什么我不能在 Range 扩展中循环 self?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55937683/

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