ich brauche die Art von ANYOBJECT zu überprüfen, die eine Int (oder Int16 oder UInt8) Wert, dhWie ANYOBJECT (oder Int) -Typ in XCode 9 unterscheiden - neue Swift Compiler
In Xcode 8 gegeben wurde - Schalt über dem Objekt, mit Fällen: is Uint8
, is Int16
, is Int
funktioniert pefrect.
In Xcode 9 - Es immer den ersten Fall eingeben, der ist möglicherweise wahr.
Hier ist ein Codebeispiel für Spielplatz:
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 Spielplatz Konsole druckt:
Int
Int16
XCode 9 Spielplatz Konsole druckt:
UInt8
UInt8
A. Kann jemand erklären, warum, und/oder anhängen Haben Sie diesbezüglich eine dokumentierte Referenz?
B. Wäre glücklich, dass mir jemand helfen kann, dieselbe Funktionalität in XCode 9 zu erreichen.
Danke.
Bridging zu NSCFNumber ist genau das, was passiert. Finde das heraus, indem ich 'Typ (von:)' von obj – MatanGold
drucke, denke ich so. 'AnyObject' ist ein beliebiger Klassentyp und' Intxx' ist keine Klasse. Casting als 'AnyObject' muss daher in' NSNumber' umgewandelt werden. – JeremyP