当前位置: 首页 > 面试题库 >

Swift中的反向范围

戚星腾
2023-03-14
问题内容

有没有办法在Swift中处理反向范围?

例如:

for i in 5...1 {
  // do something
}

是一个无限循环。

在较新版本的Swift中,该代码可以编译,但在运行时会出现错误:

致命错误:无法使用upperBound <lowerBound形成Range

我知道我可以1..5代替使用计算j = 6 - ij用作索引。我只是想知道是否还有更清晰的地方?


问题答案:

更新以获取最新的Swift 3(仍可在Swift 4中使用)

您可以reversed()在范围上使用该方法

for i in (1...5).reversed() { print(i) } // 5 4 3 2 1

stride(from:through:by:)方法

for i in stride(from:5,through:1,by:-1) { print(i) } // 5 4 3 2 1

stide(from:to:by:) 相似,但不包括最后一个值

for i in stride(from:5,to:0,by:-1) { print(i) } // 5 4 3 2 1

更新以获取最新的Swift 2

首先,协议扩展更改了reverse使用方式:

for i in (1...5).reverse() { print(i) } // 5 4 3 2 1

Xide 7 Beta 6中对Stride进行了重新设计。新用法是:

for i in 0.stride(to: -8, by: -2) { print(i) } // 0 -2 -4 -6
for i in 0.stride(through: -8, by: -2) { print(i) } // 0 -2 -4 -6 -8

它也适用于Doubles

for i in 0.5.stride(to:-0.1, by: -0.1) { print(i) }

提防浮点在此处比较界限。

Swift 1.2的早期编辑 :从Xcode 6 Beta 4开始, byReverseRange 不再存在:[

如果您只是想反转范围,则只需使用 反转 功能

for i in reverse(1...5) { println(i) } // prints 5,4,3,2,1

正如 0x7fffffff 发布的那样,有一个新的 跨步 构造可用于迭代和递增任意整数。苹果还表示,浮点支持即将到来。

来自他的回答:

for x in stride(from: 0, through: -8, by: -2) {
    println(x) // 0, -2, -4, -6, -8
}

for x in stride(from: 6, to: -2, by: -4) {
    println(x) // 6, 2
}


 类似资料:
  • 问题内容: 我正在尝试编写一个简单的方法,该方法已馈入并返回。查看Apple的文档,这似乎很简单。 以下是我丢到操场上的东西: 就目前而言,我的方法返回nil。我不确定我的错误在哪里,但是我可以放心,这对我来说是愚蠢的。感谢您的阅读。 问题答案: 或者简单地: 或扩展CLLocation: 要将地标格式化为邮寄地址,可以使用“联系人”框架: 地标 包含CLPlacemark对象的数组。对于大多数地

  • 问题内容: 关闭。 这个问题不能重现,或者是由错别字引起的。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 5年前关闭。 改善这个问题 我输入的是纬度和经度。我需要使用swift 的功能,以便向我提供位置信息的输出。我尝试使用的代码是 在我得到的日志中 似乎该函数正在失败,然后导致该函数中的致命错误。我是否在某处修改了格式? 问题答案: 您永远不会

  • 问题内容: 我在给像这样的物体 如何将字符串转换回对象? 问题答案: 您需要字符串。

  • 下面是链接:array reversed() 在讨论部分的最后,它说复杂性O(1),我相信这是关于时间复杂性的,如何反转一个数组需要O(1)时间?

  • 问题内容: 我正在尝试在Swift 3中建立一个我已经在Swift 2中拥有的范围,但是它一直给我这个错误: 这是我的代码: expiredRange是一个 在Swift 2中,我有: 问题答案: 在Swift 3中,“集合移动其索引”,请参阅 关于Swift进化的集合和索引的新模型。 这是字符串范围和索引的示例: 的 在字符串上调用方法,以从范围(现在具有属性而不是 )中计算新索引。