Ein NSNumber ein Bool enthält, wird mit anderen Arten leicht zu verwechseln, die in der Klasse NSNumber gewickelt werden kann:Gibt es eine korrekte Möglichkeit festzustellen, dass eine NSNummer von einem Bool mit Swift abgeleitet wurde?
NSNumber(bool:true).boolValue // true
NSNumber(integer: 1).boolValue // true
NSNumber(integer: 1) as? Bool // true
NSNumber(bool:true) as? Int // 1
NSNumber(bool:true).isEqualToNumber(1) // true
NSNumber(integer: 1).isEqualToNumber(true) // true
jedoch Informationen über seine ursprüngliche Art beibehalten wird, wie wir hier sehen können:
NSNumber(bool:true).objCType.memory == 99 // true
NSNumber(bool:true).dynamicType.className() == "__NSCFBoolean" // true
NSNumber(bool:true).isEqualToValue(true) || NSNumber(bool:true).isEqualToValue(false) //true
Die Frage ist: Welcher dieser Ansätze ist der beste (und/oder sicherste) Ansatz, um festzustellen, wann ein Bool in eine NSNumber und nicht in etwas anderes eingebettet wurde? Sind alle gleich gültig? Oder gibt es eine andere, bessere Lösung?
Ich habe dies als die richtige Antwort markiert, da Sie eine funktionierende Lösung bereitgestellt haben. Da es nicht in Swift ist, habe ich Ihre Antwort bearbeitet, um den Swift-Code hinzuzufügen (ich warte nur auf den Peer-Review dieser Änderung). Vielen Dank. – sketchyTech
@GoodbyeStackOverflow - hat Ihre Übersetzung für Sie genehmigt. – CRD
Ausgezeichnet, nochmals vielen Dank. – sketchyTech