将Range <int>转换为swift 3

时间:2017-08-16 07:09:02

标签: swift swift3 nsrange

我正在尝试将此代码块转换为在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))

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

任何人都可以帮助我了解这里发生了什么,我可以阅读哪些/哪些文档来理解这一点?

2 个答案:

答案 0 :(得分:1)

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

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 ..&LT; 300

答案 1 :(得分:1)

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

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

它返回CountableRange,而不只是Range,因此您可以访问RandomAccessCollection方法。

如果您只想获得Range值,可以像这样投射:

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

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