[swift-users] Foundation on Linux `CFBooleanGetTypeID`/`CFGetTypeID`

Ryan Lovelett swift-dev at ryan.lovelett.me
Tue May 24 15:11:43 CDT 2016


On Tue, May 24, 2016, at 04:07 PM, Tony Parker wrote:
> Let’s get a bug into JIRA, then we’ll figure out what we should
> do here.
 
That's the problem for me. What is the bug? Based on the code example I
provided in this thread. I'm somewhat convinced that the bug is that
Foundation on Linux/Glibc is "broken". In that it does not match the
behavior of Foundation on Darwin, yet it has the desired behavior.
 
>
> - Tony
>
>> On May 24, 2016, at 1:03 PM, Jens Alfke <jens at mooseyard.com> wrote:
>>
>>
>>> On May 24, 2016, at 12:52 PM, Tony Parker <anthony.parker at 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*[];
>>  *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
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160524/74dea257/attachment.html>


More information about the swift-users mailing list