Un NSNumber contenente un Bool viene facilmente confuso con altri tipi che possono essere avvolti nella classe NSNumber:Esiste un modo corretto per determinare che un NSNumber è derivato da un Bool usando Swift?
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
Tuttavia, è trattenuto informazioni sul suo tipo originale, come si può vedere qui:
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
La domanda è: quale di questi approcci è l'approccio migliore (e/o più sicuro) per determinare quando un Bool è stato inserito all'interno di un NSNumber piuttosto che qualcos'altro? Sono tutti ugualmente validi? O c'è un'altra soluzione migliore?
L'ho contrassegnato come la risposta corretta in quanto hai fornito una soluzione funzionante. Poiché non è in Swift, ho modificato la tua risposta per includere il codice Swift (aspettando solo la revisione tra pari di quella modifica). Grazie. – sketchyTech
@GoodbyeStackOverflow - ha approvato la traduzione per te. – CRD
Eccellente, grazie ancora. – sketchyTech