快速进行ViewController的类型转换

时间:2018-07-09 17:48:44

标签: swift typecasting-operator

我对iOS的开发和反应非常陌生。

我经常看到这样的事情

let vc = window?.rootViewController as! MainViewController

有人介意解释类型转换,对我来说这是什么目的?我一直在寻找其他问题,或者只是对目的的基本解释-但是我运气不高。

谢谢

1 个答案:

答案 0 :(得分:1)

您发布的代码正在崩溃。 as构造将一般类型的变量转换为更特定的类型。如果失败,则需要添加?as?)或感叹号(as!)。带有感叹号的表单称为“强制转换”。它将尝试将对象强制转换为其他类型,,并且如果强制转换失败将崩溃。因此,这是一个坏主意,应该避免。

最好使用这样的代码:

func someFunc() {
    guard let vc = window?.rootViewController as? MainViewController else {
       return
    }
    //Code that depends on vc being cast to type MainViewController
}

(有关更多信息,请阅读Apple Swift iBook中的guard语句。)

即使这段代码比您发布的代码要好:

func someFunc() {
    guard let vc = window?.rootViewController as? MainViewController else {
       fatalError("Unable to cast rootViewController to type MainViewController")
    }
    //Code that depends on vc being cast to type MainViewController
}

第二个版本仍然会崩溃,但是当它崩溃时,它将在控制台中显示非常清晰的消息,因此您可以知道出了什么问题。