在向下转发variable as! NSString
和向下转发variable as NSString!
之间是否存在差异(如果是,那么基本原则是什么?)
答案 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 贬低是不可能的。这使您可以检查是否成功 垂头丧气。
仅在您使用时,使用类型转换运算符的强制形式(作为!) 确保垂头丧气将永远成功。这种形式的运营商 如果您尝试向下转换为错误,将触发运行时错误 班级类型。