variable strong protocol generic functions extension swift swift3 xcode8 xcode9 swift4

strong - Cómo diferenciar el tipo AnyObject(o Int) en XCode 9-nuevo compilador Swift



swift declare protocol (1)

Necesito verificar el tipo de AnyObject que recibió un valor Int (o Int16 o UInt8), es decir,

En Xcode 8 - cambio sobre el objeto, usando casos: is Uint8 , is Int16 , is Int funciona pefrect.
En Xcode 9: siempre ingresa el primer caso que posiblemente sea verdadero.

Aquí hay una muestra de código para 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 } }

Consolas de juegos XCode 8:
En t
Int16

Consola XCode 9 impresiones de la sala de juegos:
UInt8
UInt8

A. ¿Puede alguien explicar por qué, y / o adjuntar alguna referencia documentada con respecto a esto?
B. Estaría feliz de que alguien pueda ayudarme a obtener la misma funcionalidad en XCode 9.

Gracias.


Desde Swift 3 todos los tipos numéricos son Any , not AnyObject

var t1: Any? var t2: Any? t1 = 30 as Any t2 = Int16(30) as Any ...

Esto resuelve el problema.

Supongo que la conversión a AnyObject puentea el tipo a NSNumber que coincide con cualquier caso.