【问题标题】:What is wrong with this "Do.. While" loop in Swift?Swift 中的“Do.. While”循环有什么问题?
【发布时间】:2014-10-29 22:53:08
【问题描述】:

我正在尝试用 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) &lt; 0.006) 行中出现运行时错误。

setup 函数在 prepareLayout() 中调用

override func prepareLayout() {
    super.prepareLayout()
    setup()
    ...
}

没有do..while 循环,应用程序运行良好。所以我想知道,为什么?

【问题讨论】:

    标签: memory swift closures


    【解决方案1】:

    事实证明我必须更加安全

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-10
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多