这是代码:
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.2let b:float? = 1.2let c:Double? = 1.2isInt(a)isInt(b)isInt(c)
我理解在第一个if循环中,param被转换为Int然后打印出来1.
但是为什么在第二个if循环中,如果值为Int是真的然后打印出1.2?
解决方法 在你的b情况下,让value = param将值桥接到NSNumber类型.对于NSNumber,值为Int将始终为true.对于非桥接值:
a is Int // always true,AnyObject brIDges to NSNumber hereb is Int // false,cast from float to Int always failsc is Int // false,cast from Double to Int always fails
这个答案假定基金会已被导入.没有基金会,您的任务将失败.
总结以上是内存溢出为你收集整理的Swift类型推断和类型检查问题全部内容,希望文章能够帮你解决Swift类型推断和类型检查问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)