将范围 <Int> 转换为 swift 3

Convert Range<Int> to swift 3

我正在尝试将此代码块转换为在 swift 3 中工作。

let grainSize = CGFloat(0.01)
    let min = CGFloat(-3)
    let max = CGFloat(3)
    let range = Range<Int>(start: Int(min/grainSize), end: Int(max/grainSize))

我面临的问题是 Range - 我试图查看苹果文档,但我什至不知道我在寻找什么。它报告的问题是它说 Cannot convert value of type 'Int' to expected argument type 'NSRange' (aka '_NSRange')

任何人都可以帮助我了解这里发生的事情以及我可以阅读的 where/what 文档来理解这一点吗?

在 Swift 3 中试试这个,它会起作用。 Range 中没有 init(start: end:) 方法。这就是这个错误的原因。

let grainSize = CGFloat(0.01)
let min = CGFloat(-3)
let max = CGFloat(3)
let range = Range<Int>(uncheckedBounds: (lower: Int(min/grainSize), upper: Int(max/grainSize)))

这将创建以下范围:

-300..<300

您可以使用更简单的语法获得更强大的 Countable 范围:

let range = (Int(min/grainSize)..<Int(max/grainSize))

以returnsCountableRange, not just Range, so you can access to RandomAccessCollection方法为例。

如果你只想获得 Range 值,你可以这样转换它:

let range = Range(Int(min/grainSize)..<Int(max/grainSize))

还有 helpful post 关于 swift 中的范围 3.