Sweeper Sweeper - 6 months ago 37
Swift Question

Core Data generates an NSManagedObject subclass with a property of type NSNumber, but it's a Bool

I just created a Core Data data model and added some entities. Now I'm generating

NSManagedObject
subclasses.

In the generated code, I found that one of my properties, whose type is "Boolean" in the data model, has turned into a property of type
NSNumber
!

That's not correct, I thought. An
NSNumber
is certainly not a boolean. Why doesn't it just use the
Bool
type?

Then I thought that this might be another one of those annoying things of Objective-C. I think that just like
Int
and
Double
, a
Bool
cannot be saved into Core Data so it has to use an
NSNumber
. Am I right?

How to convert this
NSNumber
to a
Bool
and how to convert a
Bool
to an
NSNumber
? Maybe 0 = false and 1 = true? What about other values? This isn't type-safe at all...

Answer

for your question How to convert this NSNumber to a Bool and how to convert a Bool to an NSNumber? u can do like below, for NSNumber objects

//convert bool to number 
NSNumber *boolInNumber = [NSNumber numberWithBool:YES]; //or NO

//get back, convert number to bool 
NSNumber *aNum = [NSNumber numberWithBool:YES]; //get the NSNumber instance
BOOL numberInBool = [aNum boolValue];

and aslo u can convert to other types, for more info check the class reference hear

sorry for the delay, and for swift version,

  var numInBool:NSNumber? //is a nsnumber instance
  numInBool = NSNumber(bool: true) //get number from bool (number in bool)

  var boolInNum:Bool? //it is boolean
  boolInNum = numInBool!.boolValue  //get bool from number (bool from number)