我正在尝试将此代码块转换为在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')
任何人都可以帮助我了解这里发生了什么,我可以阅读哪些/哪些文档来理解这一点?
答案 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中的范围。