2017-10-17 65 views
4

我需要检查这是给一个Int(或Int16类型或UINT8)值,即如何区分AnyObject(或强度)输入的XCode 9 - 新夫特编译

在Xcode中8 AnyObject的类型 - 开关在对象上,使用情况: is Uint8is Int16is Int作品pefrect。
在Xcode中9 - 它总是输入是可能真尚属首例。

这里是游乐场一个代码示例:

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

A.有人能解释为什么,和/或连接编辑任何有关这方面的文献资料?
B.会很高兴我有人可以帮助我在XCode 9中获得相同的功能。

谢谢。

回答

2

由于斯威夫特3所有的数字类型Any,不AnyObject

var t1: Any? 
var t2: Any? 

t1 = 30 as Any 
t2 = Int16(30) as Any 
... 

这解决了问题。

我认为铸造到AnyObject桥接类型为NSNumber匹配任何情况。

+0

桥接NSCFNumber究竟是发生了什么。通过打印obj – MatanGold

+0

的'type(of:)'我发现了这个。 'AnyObject'是任何类类型和'Intxx'不是类。因此,作为'AnyObject'的投射必须将其变成'NSNumber'。 – JeremyP

相关问题