由于Swift严格检查类型,有时我们需要在NSString和String,NSArray和[AnyObject]等之间进行转换.但实际上有两种不同的方法可以做到这一点:
str as StringString(str)在Swift中更推荐哪个?为什么?
你在谈论铸造与强制.这不是"推荐"的问题.它们是完全不同的东西.
转换只是一种向编译器重新编写内容的方法.您的重新描述必须是真的,否则您将在运行时崩溃.
例如,您可以将AnyObject转换为String(with as!),以防它是一个字符串; 您只是告诉编译器,然后您可以向此对象发送与字符串相关的消息.强制转换是合法的,因为String桥接到NSString,NSString是AnyObject,所以这个 AnyObject可能确实是一个String.但是如果你撒谎并且这不是一个字符串,那么当应用程序运行时你会崩溃,并且你试图将一些事实上已经不是String的字符串强制转换为String.
强制完全成为一个新的对象.它仅适用于新类型具有接受旧对象的初始化程序的情况.
例如,您无法在Swift中的数值类型之间进行转换.你必须强迫,这是一个完全不同的东西 - 也就是说,你必须根据原始对象创建一个不同数字类型的新对象.使用期望UInt8的Int8的唯一方法是强制它:UInt8(x).这是合法的,因为UInt8有一个Int8初始值设定项(如Swift标题中所示):
extension UInt8 {
public init(_ v: Int8)
// ...
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |