Swift - 在prepareForSegue方法中使用Switch语句

时间:2015-03-25 14:26:51

标签: ios swift switch-statement segue uistoryboardsegue

我已设置以下开关声明,以处理3种不同的按钮水龙头:摇滚,纸张,剪刀。例如,点击Rock按钮,将带您进入ResultViewController,使用" rockSegue"信息显示。

每次我运行应用程序,然后点击其中一个按钮(例如摇滚)时,它会在转换到ResultViewController时崩溃,说明在展开可选值时resultImage包含nil。它所引用的资产肯定存在,所以我在这里做错了什么呢?

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let controller = segue.destinationViewController as ResultViewController
    switch segue.identifier! {
    case "rockSegue":
        controller.resultImage!.image = UIImage(named: "PaperCoversRock")
        controller.resultLabel!.text = "You lose"...(continued)

该按钮包含以下代码:

  @IBAction func rockButton() {
    performSegueWithIdentifier("rockSegue", sender: self)   
}

1 个答案:

答案 0 :(得分:1)

这一行:

controller.resultImage!.image = UIImage(named: "PaperCoversRock")

尝试在将生成的resultImage分配给其UIImage属性之前强制(由于'!')展开image

由于此时resultImagenil,因此无论图片是否存在都会获得异常,因为无法解包该图片以访问其image属性。

在运行

上面的行之前,必须初始化

resultImage

<强>更新

此时,当您获得目标控制器时,它会被初始化,但仍未生成其出口,因为尚未访问控制器的视图(这会触发viewDidLoad和出口的初始化)。

所以你可以:

  1. 将图像名称存储为目标控制器中的属性,并在控制器的viewDidLoad()方法中设置图像

  2. 访问控制器的视图(即使只是阅读它)它将触发控制器的视图创建流程(虽然我在某处可以阅读,但不太确定这一点)