swift - 如何在 Swift 中表达前向或后向范围?

标签 swift swift4

<分区>

在 Swift 中是否有一种简洁的方式来表达向前和向后的可迭代范围?

let range = forward ? (x+1)..<count : (0..<x).reversed()

for i in range {
  // ...
}

这不起作用,因为 CountableRange 和 ReversedRandomAccessCollection<(CountableRange)> 不兼容。

最佳答案

您需要使用类型橡皮擦。标准库提供AnyCollection ,这就是诀窍:

let range = forward ? AnyCollection((x+1)..<count) : AnyCollection((0..<x).reversed())

for i in range {
  // ...
}

关于swift - 如何在 Swift 中表达前向或后向范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45873244/

相关文章:

ios - 无法将类型 '(_) -> ()?' 的值转换为预期的参数类型 '@convention(block) () -> Void'

ios - Swift:如何在 Sprite 上设置水平前后移动?

ios - 类型 '[Root]' 的值没有成员 'commit' 。我如何解码 JSON 根数组

Swift - 如何在没有segue的情况下在tableview中选择多行

dynamic - @objc 动态 var 在 Swift 4 中意味着什么

iOS:通过单击按钮增加动画

swift - 类型 'StorageMetadata' 的值没有成员 'downloadURL'

ios - 在 Swift 中测试 Optional 值后解包时出错

sql - 如何在 SWIFT 的 IOS CORE-DATA 请求中使用 SQL GROUP BY 和 SUM 函数?

Swift、macos - 我可以检测或让其他应用程序位于前台吗?