如何在Swift 3/4中使用range.map?

7

我有下面的代码,在Swift 2.3中可以运行。我不知道如何将它转换为Swift 3/4 - 问题是这个:Value of type 'Range<Int>' has no member 'map'

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)))
        let lol = NSRange(range)

        var points = range.map { step -> CGPoint in
            let i = grainSize * CGFloat(step)
            let x = x_base + (i * controller.width / 4.0)
            let y = y_base + (m * equation(i))
            if x_init == CGFloat.max { x_init = x }
            return CGPointMake(x, y)
        }
        points.append(CGPointMake(x_init, y_base))
        points.forEach { renderer.lineTo($0) }

我想知道是否有人可以为我指明正确的方向 - 甚至是与此相关的文件,因为我在苹果文档中也找不到任何关于它的信息 =[


请参考 https://oleb.net/blog/2016/09/swift-3-ranges/ 进行比较。 - Martin R
1个回答

9

Range不采用Sequence,只需将范围文字直接创建为CountableClosedRange

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

这百分之百有效。非常感谢。您能为我指出一些关于此的文档资料吗?以便我更好地理解它。 - stktrc
11
另一种选择(无需范围):var points = stride(from: min, through: max, by: grainSize).map { i in ... } - Martin R
@MartinR 这正是我在寻找的!谢谢你。 - nomnom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接