【问题标题】:Issues with optional types and UIDynamicAnimator可选类型和 UIDynamicAnimator 的问题
【发布时间】:2014-11-13 22:40:02
【问题描述】:

我正在使用 Cocoa 进行 O'Reilly 的 Swift Development 并收到以下错误:

Bound value in a conditional binding must be of Optional type

针对以下代码:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var imageView: UIImageView!
var dynamicAnimator = UIDynamicAnimator()

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    if let dynamicAnimator = UIDynamicAnimator(referenceView: self.view) {
        // creating and adding a gravity behaviour
        let gravityBehaviour = UIGravityBehavior(items: [self.imageView])
        dynamicAnimator.addBehavior(gravityBehaviour)

        // creating and adding a collision behaviour
        let collisionBehaviour = UICollisionBehavior(items: [self.imageView])
        collisionBehaviour.translatesReferenceBoundsIntoBoundary = true

        dynamicAnimator.addBehavior(collisionBehaviour)

        self.dynamicAnimator = dynamicAnimator
    }

}
}

错误在于这一行:

if let dynamicAnimator = UIDynamicAnimator(referenceView: self.view) {

当我向 dynamicAnimator 添加一个问号以使其成为可选时,我得到了新的错误:

Expected '{' after 'if' condition
Variable binding in a condition requires an initializer
Braced block of statements is an unusual closure

我现在正在阅读可选类型以尝试理解它们,但这是直接来自书中的代码。我检查了他们的论坛和勘误部分,没有人提到这个问题。有人有什么想法吗?

谢谢

【问题讨论】:

    标签: cocoa swift


    【解决方案1】:

    UIDynamicAnimator 初始化器不会失败,就像它们用于某些类一样,因此您不会在该行中返回可选值。如果没有可选值,if let... 构造就没有意义,因此编译器不允许您编写它。只需摆脱 if 部分,你会没事的。

    let dynamicAnimator = UIDynamicAnimator(referenceView: self.view)
    // no braces, either
    // ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      相关资源
      最近更新 更多