如何在 XCode 9 中区分 AnyObject(或 Int)类型 - 新的 Swift 编译器
How to differentiate AnyObject (or Int) type in XCode 9 - new Swift compiler
我需要检查给定 Int(或 Int16 或 UInt8)值的 AnyObject 的类型,即
在Xcode8-切换对象,用例:
is Uint8
、is Int16
、is Int
工作正常。
在 Xcode 9 - 它总是输入第一种情况,即 可能 为真。
这是 Playground 的代码示例:
var t1: AnyObject?
var t2: AnyObject?
t1 = 30 as AnyObject
t2 = Int16(30) as AnyObject
if let obj1 = t1 {
switch obj1 {
case is UInt8:
print("UInt8")
case is Int16:
print("Int16")
case is Int:
print("Int")
default:
break
}
}
if let obj2 = t2 {
switch obj2 {
case is UInt8:
print("UInt8")
case is Int16:
print("Int16")
case is Int:
print("Int")
default:
break
}
}
XCode 8 个游乐场控制台打印:
整数
Int16
XCode 9 个游乐场控制台打印:
UInt8
UInt8
一个。有人能解释一下为什么吗,and/or 附上了任何与此相关的文档参考?
B. 如果有人可以帮助我在 XCode 9.
中实现相同的功能,我会很高兴
谢谢。
因为Swift3所有数值类型都是Any
,不是AnyObject
var t1: Any?
var t2: Any?
t1 = 30 as Any
t2 = Int16(30) as Any
...
这解决了问题。
我想强制转换为 AnyObject
可以将类型桥接到 NSNumber
以匹配任何大小写。
我需要检查给定 Int(或 Int16 或 UInt8)值的 AnyObject 的类型,即
在Xcode8-切换对象,用例:
is Uint8
、is Int16
、is Int
工作正常。
在 Xcode 9 - 它总是输入第一种情况,即 可能 为真。
这是 Playground 的代码示例:
var t1: AnyObject?
var t2: AnyObject?
t1 = 30 as AnyObject
t2 = Int16(30) as AnyObject
if let obj1 = t1 {
switch obj1 {
case is UInt8:
print("UInt8")
case is Int16:
print("Int16")
case is Int:
print("Int")
default:
break
}
}
if let obj2 = t2 {
switch obj2 {
case is UInt8:
print("UInt8")
case is Int16:
print("Int16")
case is Int:
print("Int")
default:
break
}
}
XCode 8 个游乐场控制台打印:
整数
Int16
XCode 9 个游乐场控制台打印:
UInt8
UInt8
一个。有人能解释一下为什么吗,and/or 附上了任何与此相关的文档参考?
B. 如果有人可以帮助我在 XCode 9.
谢谢。
因为Swift3所有数值类型都是Any
,不是AnyObject
var t1: Any?
var t2: Any?
t1 = 30 as Any
t2 = Int16(30) as Any
...
这解决了问题。
我想强制转换为 AnyObject
可以将类型桥接到 NSNumber
以匹配任何大小写。