在Swift中键入向下转换

时间:2015-05-19 08:59:42

标签: swift casting

在向下转发variable as! NSString和向下转发variable as NSString!之间是否存在差异(如果是,那么基本原则是什么?)

2 个答案:

答案 0 :(得分:4)

  • variable as! NSString

被强制向下转换变量为NSString,如果variable不是NSString,则会引发运行时错误。

  • variable as NSString!

由于Swift 1.2运算符as只能用于向上转换,因此上述代码会引发编译时错误,除非variable已知为{NSString的子类1}}。

答案 1 :(得分:1)

您所指的内容更好地称为向下转换。您可以阅读Apple有关此问题的文档here

  

某个类类型的常量或变量实际上可能是指   幕后子类的实例。你相信这是什么   在这种情况下,您可以尝试使用类型向下转换为子类类型   cast操作符(as?或as!)。

     

因为向下转换可能会失败,所以类型转换运算符有两个   不同的形式。条件形式,作为?,返回一个可选值   您正试图向下转型的类型。强制形式,如!   尝试向下倾斜并强制将结果展开为一个单一的   复合行动。

     

使用类型转换运算符的条件形式(如?)   不确定垂头丧气是否会成功。这种形式的运营商将   总是返回一个可选值,如果是,则值为nil   贬低是不可能的。这使您可以检查是否成功   垂头丧气。

     

仅在您使用时,使用类型转换运算符的强制形式(作为!)   确保垂头丧气将永远成功。这种形式的运营商   如果您尝试向下转换为错误,将触发运行时错误   班级类型。

相关问题