cocoa - 可选类型和 UIDynamicAnimator 的问题

标签 cocoa swift

我正在使用 O'Reilly 的 Cocoa 进行 Swift 开发,但收到以下错误:

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

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

谢谢

最佳答案

UIDynamicAnimator 初始化器不会失败,就像某些类一样,因此您不会在该行中获取可选值。如果没有可选值,if let... 构造就没有意义,因此编译器不允许您编写它。只要去掉 if 部分就可以了。

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

关于cocoa - 可选类型和 UIDynamicAnimator 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26919822/

相关文章:

string - (Swift) 解析字符串的函数 (from-to)

Objective-C:你能测试静态类类型的未初始化指针吗?

cocoa - 因 Cocoa 中的错误处理而陷入困境。我是不是太过分了?

objective-c - 使用快捷方式记录器保存/加载键盘快捷键?

ios - 如何获得可用 NSFont 系列的列表?

swift - Deinit 调用了两次

objective-c - Cocoa - 将面板滚出窗外?

滚动时的 iOS TableView 索引值

swift - 飞行模式下的 iOS 13 wifi ssid

swift - Element 为 Optional 的 Generators 如何知道它们何时到达终点?