Let’s get a bug into JIRA, then we’ll figure out what we should do here.
- Tony > On May 24, 2016, at 1:03 PM, Jens Alfke <j...@mooseyard.com> wrote: > > >> On May 24, 2016, at 12:52 PM, Tony Parker <anthony.par...@apple.com >> <mailto:anthony.par...@apple.com>> wrote: >> >> One other possibility is using the objCType property on NSNumber’s >> superclass NSValue to check. > > That doesn’t work, unfortunately, at least not with Apple’s Foundation. > NSNumbers initialized with booleans have objcType “c” because `BOOL` is just > a typedef for `char`. So the only way to tell a boolean apart from an 8-bit > int is to compare the object pointer against the singleton true and false > objects. > > Here’s a snippet of Obj-C code I use for this in my JSON encoder: > > char ctype = self.objCType[0]; > switch (ctype) { > case 'c': { > // The only way to tell whether an NSNumber with 'char' type is a > boolean is to > // compare it against the singleton kCFBoolean objects: > if (self == (id)kCFBooleanTrue) > return yajl_gen_bool(gen, true); > else if (self == (id)kCFBooleanFalse) > return yajl_gen_bool(gen, false); > else > return yajl_gen_integer(gen, self.longLongValue); > } > >> I haven’t seen how much of this is implemented in corelibs-foundation yet. > > I took a peek at the Swift NSNumber and NSValue implementations on Github, > and the objcType stuff doesn’t seem to be functional. It looks like objcType > will only have a value if the object was initialized as an NSValue with the > type code passed in, not if the typical NSNumber initializers were used. > > —Jens
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users