我对iOS的开发和反应非常陌生。
我经常看到这样的事情
let vc = window?.rootViewController as! MainViewController
有人介意解释类型转换,对我来说这是什么目的?我一直在寻找其他问题,或者只是对目的的基本解释-但是我运气不高。
谢谢
答案 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
}
第二个版本仍然会崩溃,但是当它崩溃时,它将在控制台中显示非常清晰的消息,因此您可以知道出了什么问题。