That’s perfect, thanks Ryan.

- Tony

> On May 24, 2016, at 1:39 PM, Ryan Lovelett <swift-...@ryan.lovelett.me> wrote:
> 
> On Tue, May 24, 2016, at 04:19 PM, Tony Parker wrote:
>>  
>>> On May 24, 2016, at 1:11 PM, Ryan Lovelett <swift-...@ryan.lovelett.me 
>>> <mailto:swift-...@ryan.lovelett.me>> wrote:
>>>  
>>> 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.
>>  
>> What I mean is that I want to track the issue in JIRA so we don’t lose it, 
>> and so we can find it later when looking for issues that prevent fully 
>> cross-platform behavior. We can look into fixing these in several ways, 
>> including adding new API in both frameworks, changing implementations, etc.
>  
> I have filed a bug https://bugs.swift.org/browse/SR-1610 
> <https://bugs.swift.org/browse/SR-1610>
>  
> Obviously please reformat/update accordingly. This was the best I could come 
> up with.
>  
>>  
>> - Tony
>>  
>>>  
>>>>  
>>>> - Tony
>>>>  
>>>>> On May 24, 2016, at 1:03 PM, Jens Alfke <j...@mooseyard.com 
>>>>> <mailto: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

Reply via email to