【发布时间】:2016-01-27 20:32:45
【问题描述】:
我不是在寻找一个答案,比如如何正确地做到这一点,而是为什么会发生这种情况。
代码如下:
func isInt(param: AnyObject?) {
if let value = param as? Int {
print(value)
} else {
print("Not Int")
}
if let value = param {
if value is Int {
print(value)
} else {
print("Not Int")
}
}
}
let a:AnyObject? = 1.2
let b:Float? = 1.2
let c:Double? = 1.2
isInt(a)
isInt(b)
isInt(c)
我理解在第一个 if 循环中,param 被强制转换为 Int,然后打印出 1。
但是为什么在第二个if 循环中,if value is Int 为真,然后打印出1.2?
【问题讨论】:
-
在您的
b案例中,let value = param将value桥接到NSNumber类型。对于NSNumber,value is Int将始终为真。 -
@JAL 我刚刚查找了
NSNumber文档。不展开并执行if param is Int,它是true并打印相同的值。同样的理由也适用吗? -
添加了未桥接值的答案。
标签: swift casting swift2 optional anyobject