这有什么问题"做..而#34;在Swift中循环?

时间:2014-10-29 22:53:09

标签: memory swift closures

我想在Swift中写this(我在步骤54)。在UICollectionViewLayout类中,我有一个函数setup函数

func setup() {
    var percentage  = 0.0
    for i in 0...RotationCount - 1 {

        var newPercentage = 0.0

        do {
            newPercentage = Double((arc4random() % 220) - 110) * 0.0001
            println(newPercentage)
        } while (fabs(percentage - newPercentage) < 0.006)

        percentage = newPercentage

        var angle = 2 * M_PI * (1 + percentage)
        var transform = CATransform3DMakeRotation(CGFloat(angle), 0, 0, 1)
        rotations.append(transform)
    }
}

以下是教程

中描述setup函数的方法
  

首先,我们创建一个我们添加对象的临时可变数组。然后   我们遍历循环,每次都创建一个旋转。我们创造了一个   随机百分比介于-1.1%和1.1%之间,然后用它来创建一个   调整了CATransform3D。我稍微嘲笑了一下并添加了一些逻辑   确保我们随机生成的旋转百分比最小   与预先生成的0.6%不同。这可以确保堆叠中的照片不会被所有旋转的不幸所困扰   同样的方式。完成转换后,我们将其添加到临时数组中   将其包裹在NSValue中,然后冲洗并重复。毕竟32   我们设置了私有数组属性。现在我们就是   需要投入使用。

当我运行应用程序时,while (fabs(percentage - newPercentage) < 0.006)行出现运行时错误。

enter image description here

setup

中调用prepareLayout()函数
override func prepareLayout() {
    super.prepareLayout()
    setup()
    ...
}

没有do..while循环,应用运行正常。所以我想知道,为什么?

2 个答案:

答案 0 :(得分:0)

原来我必须更加安全

newPercentage = Double(Int((arc4random() % 220)) - 110) * 0.0001

答案 1 :(得分:0)

这必须是一个Swift错误。该代码不应该在运行时崩溃。它应该在newPercentage =表达式上给出编译器错误,或者它应该像C一样正确地提升类型。