NSNumber, съдържащ Bool, лесно се бърка с други типове, които могат да бъдат обвити в класа NSNumber:
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
Информацията за оригиналния му тип обаче се запазва, както можем да видим тук:
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
Въпросът е: кой от тези подходи е най-добрият (и/или най-безопасният) подход за определяне кога Bool е бил обвит в NSNumber, а не нещо друго? Всички ли са еднакво валидни? Или има друго, по-добро решение?