The definition should be;
NSString * const kCFCalendarIdentifierISO8601 = @"iso8601”;

It was likely empty since it was probably un-implemented.


> On Oct 4, 2016, at 8:34 AM, Pushkar N Kulkarni via swift-corelibs-dev 
> <swift-corelibs-dev@swift.org> wrote:
> 
> Hi Alex, 
> 
> Thanks for your response. 
> 
> This failure doesn't happen with ISO8601 alone. There are half a dozen 
> identifiers that aren't supported. Having said that, I added these 
> identifiers to that if-statement and the calendar initialization did happen:
> 
> .indian, .islamicTabular, .islamicUmmAlQura, .iso8601, .persian, 
> .republicOfChina
> 
> I am not sure if they would cause any other problems thought. 
> 
> Another thing I got curious about: Why is NSCalendar.Identifier.ISO8601 
> associated with an empty string here (it doesn't really matter, I guess)?
> https://github.com/apple/swift-corelibs-foundation/blob/master/Foundation/NSCalendar.swift#L56
>  
> <https://github.com/apple/swift-corelibs-foundation/blob/master/Foundation/NSCalendar.swift#L56>
> 
> 
> Pushkar N Kulkarni,
> IBM Runtimes
> 
> Simplicity is prerequisite for reliability - Edsger W. Dijkstra
> 
> 
> 
> -----alb...@apple.com <mailto:-----alb...@apple.com> wrote: -----
> To: Pushkar N Kulkarni/India/IBM@IBMIN
> From: Alex Blewitt 
> Sent by: alb...@apple.com <mailto:alb...@apple.com>
> Date: 10/04/2016 03:28PM
> Cc: swift-corelibs-dev <swift-corelibs-dev@swift.org 
> <mailto:swift-corelibs-dev@swift.org>>
> Subject: Re: [swift-corelibs-dev] Calendar identifiers
> 
> 
>> On 4 Oct 2016, at 10:29, Pushkar N Kulkarni via swift-corelibs-dev 
>> <swift-corelibs-dev@swift.org <mailto:swift-corelibs-dev@swift.org>> wrote:
>> 
>> Hi there, 
>> 
>> I've hit an obstacle while working on a crash seen in initing a Calendar 
>> (https://bugs.swift.org/browse/SR-2551) 
>> <https://bugs.swift.org/browse/SR-2551)>
>> 
>> For the Calendar initialiser "init(identifier: Calendar.Identifier)", the 
>> possible values of Calendar.Identifier are listed here 
>> <https://developer.apple.com/reference/foundation/calendar.identifier>. 
>> However, we eventually end up calling 
>> "_CFCalendarInitWithIdentifier(CFCalendarRef calendar, CFStringRef 
>> identifier)" and the latter works only for a specific set of calendar 
>> identifiers. See this if statement:
>>    
>> https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/Locale.subproj/CFCalendar.c#L239
>>  
>> <https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/Locale.subproj/CFCalendar.c#L239>
>> 
>> For other identifier values, we crash (that is SR-2551). On mac, all the 
>> identifier values are supported. It seems that the calendar identifier is 
>> ultimately encoded as a key-value pair in the locale ID for the calendar.  
>> 
>> Can anybody please help me understand the rationale of the if-statement 
>> above? I am new to ICU. I did search for justifications but didn't come 
>> across convincing. 
> 
> The if statement is canonicalising the reference to the constant e.g. 
> kCFCalendarIdentifierBuddhist. This allows other instances to be passed in 
> but then resolved to the same instance, such that pointer comparisons work 
> for future calls. The same is done for Swift.
> 
> On macOS, there are additional checks in the CoreFoundation equivalent (such 
> as kCFCalendarIdentifierISO8601) which is why it works on Darwin. However, I 
> don't know if there were specific reasons for excluding the ISO8601 calendar, 
> unless the ICU library doesn't understand it. Testing adding support should 
> be a case of doing something similar to this commit, which re-enabled the 
> Chinese calendar:
> 
> https://github.com/apple/swift-corelibs-foundation/commit/c1d940dd6099de65f959fd42274cf0e65984efe0
>  
> <https://github.com/apple/swift-corelibs-foundation/commit/c1d940dd6099de65f959fd42274cf0e65984efe0>
> Of course building with the 'if' switch enabled may highlight other issues, 
> but on a quick test build it seems that adding the additional if case to the 
> statement results in the ISO8601 calendar being returned. I'll let others 
> explain in more detail if there's some specific subtlety for why it was left 
> out in the first place.
> 
> Alex
> 
> _______________________________________________
> swift-corelibs-dev mailing list
> swift-corelibs-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

Reply via email to