我在我的项目中发现了一个有趣的代码,我想知道它是如何工作的.如果我简化它,在游乐场看起来像这样:
var b: Bool = true
var n: NSNumber = b as NSNumber
Run Code Online (Sandbox Code Playgroud)
我不明白为什么as运营商投Bool了NSNumber.文档as给出了使用它的唯一示例,即用于检查数组中元素的类型[Any].这是Docs的一个例子,这就是我期望的as用法:
var things = [Any]()
for thing in things {
switch thing {
case 0 as Int:
case 0 as Double:
Run Code Online (Sandbox Code Playgroud)
我没想到as会做一个真正的演员.我在哪里可以阅读更多相关信息?当我尝试类似的代码Int代替NSNumber,它不会编译:
var b: Bool = true
var n: Int = b as Int --> doesn't compile
Run Code Online (Sandbox Code Playgroud)
那NSNumber似乎是一个特例?我糊涂了.任何人都可以阐明这一点吗?
该as操作可用于两种类型的铸件.型铸造和桥梁铸造.类型转换可用于将子类转换为超类(称为upcasting)或向下转换超类转换为子类(仅在首次提升子类实例时才有效).这是您在示例中看到的Any数组.
然而,桥接构建是一种机制,用于更容易地Foundation与Swift类之间的互操作性.NSNumber有一个init方法,它接受一个Bool输入参数.as您的示例中的运算符调用此初始值设定项,因此
var b: Bool = true
var n: NSNumber = b as NSNumber
Run Code Online (Sandbox Code Playgroud)
只是一个简写符号
var b:Bool = true
var n = NSNumber(value: b)
Run Code Online (Sandbox Code Playgroud)
Int并且Bool都是Swift类型,因此桥接器不适用于它们.
| 归档时间: |
|
| 查看次数: |
3241 次 |
| 最近记录: |