Je dois vérifier le type de ANYOBJECT qui a été donné un Int (ou Int16 ou UInt8) valeur, à savoirComment différencier ANYOBJECT (ou Int) type dans XCode 9 - nouveau compilateur Swift
Dans Xcode 8 - commutation au-dessus de l'objet, en utilisant des boîtiers: is Uint8
, is Int16
, is Int
fonctionne pefrect.
Dans Xcode 9 - Il faut toujours entrer le premier cas éventuellement vrai.
Voici un exemple de code pour 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 jeux impressions console:
Int
Int16
XCode 9 imprime console de jeux:
Uint8
UInt8
A. Quelqu'un peut-il expliquer pourquoi et/ou attacher ed une référence documentée à ce sujet?
B. Serait heureux que quelqu'un puisse m'aider à réaliser la même fonctionnalité dans XCode 9.
Merci.
La transition vers NSCFNumber est exactement ce qui se passe. Trouvé cela en imprimant 'type (de:)' de l'obj – MatanGold
Je le pense. 'AnyObject' est n'importe quel type de classe et' Intxx' n'est pas une classe. Casting comme 'AnyObject' doit, par conséquent, le transformer en' NSNumber'. – JeremyP