ios – Swift:区别为String?相对于字符串

参见英文答案 > Downcasting in Swift with as and as?3
是否有区别? String vs. String在斯威夫特?如果是这样,有什么区别,何时应该使用一个与另一个?

解决方法

有一个微妙但重要的区别:

>变量为? String:变量可以是任何类型,如数组,整数等.如果是字符串,则转换为字符串,否则设置为nil.
> variable as String?:variable是一个String?,但存储在一个不透明的类型中,例如AnyObject?,或者它是一个不可选的字符串.如果它不同,则会生成运行时异常.

一些例子:

var x: AnyObject? = "Test"

x as String? // OK,the result is an optional string
x as? String // OK,evaluates to an optional string
"string" as String? // OK,evaluates to optional string

x as? Int // OK,evaluates to nil,it's not an Int
x as Int? // Runtime exception,it's not castable to optional Int

所以:

作为?类型意味着:如果可能,转换为此类型,否则评估为零
>作为类型?意味着:转换为可选类型,因为我知道它是一个可选的类型.我明白如果不是这样,就会生成运行时异常

然而,真正的区别在于?而作为:前者是试图投射,后者是强制投射,如果不可能导致运行时错误.

更新2015年12月14日由于Swift 1.2,作为运算符有3个变体:

作为?是试图投射,如果投射失败,评估为零作为!是强制转换,导致运行时异常,如果cast失败(这是以前做过的)现在是一种特殊类型的转换,用于当转换为等效类型时,通常是桥接类型,例如Swift的String和NSString.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...