Swift 3: 用浮点数递增替换C风格的for循环

3

我在我的应用程序中有这样一个循环:

for var hue = minHue; hue <= maxHue; hue += hueIncrement
{
   let randomizedHue = UIColor.clipHue(
       Random.uniform(ClosedInterval(hue - dispersion, hue + dispersion))
   ) 
   colors.append(colorWithHue(randomizedHue))
}

hueIncrement浮点数,所以我不能像这样使用范围运算符:..<

在 Swift 3 中,最好、最简洁的实现循环的方法是什么?


2
对于色调变量hue,从最小色调minHue开始,以hueIncrement为步长逐渐增加到最大色调maxHue - Bhavin Bhadani
1
你说得对!你能发一个答案吗,这样我就可以关闭这个问题了吗? - kelin
1
无论如何都不应该使用for循环来处理浮点数,因为会有精度损失。 - gnasher729
@gnasher729,在这种情况下精度并不重要。 - kelin
1个回答

21

你可以使用步幅函数 stride(through:, by:) 来实现这个功能,例如:

for hue in (minHue).stride(through: maxHue, by: hueIncrement){
    // ...
}

Swift3.0 开始,你可以使用 stride(from:to:by:)stride(from:through:by:) 语法。

for hue in stride(from: minHue, through: maxHue, by: hueIncrement){
    //....
}

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