如何在 XCode 9 中区分 AnyObject(或 Int)类型 - 新的 Swift 编译器

How to differentiate AnyObject (or Int) type in XCode 9 - new Swift compiler

我需要检查给定 Int(或 Int16 或 UInt8)值的 AnyObject 的类型,即

在Xcode8-切换对象,用例: is Uint8is Int16is 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 以匹配任何大小写。