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.