Why is exposing an Optional as an opaque box less error prone than an NSNull? 
That doesn't seem obviously true to me.

> On Aug 24, 2016, at 8:00 PM, Charles Srstka via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
>>> On Aug 24, 2016, at 8:27 PM, Greg Parker via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> On Aug 23, 2016, at 3:36 PM, Douglas Gregor via swift-evolution 
>>> <swift-evolution@swift.org> wrote:
>>> 
>>> Proposed solution
>>> 
>>> When an Optional<T> value is bridged to an Objective-C object, if it 
>>> contains some value, that value should be bridged; otherwise, NSNull or 
>>> another sentinel object should be used.
>>> 
>> I don't think I like this.
>> 
>> Let me verify my understanding. If I have this:
>> 
>>     // imported from ObjC
>>     func f(with object: Any)
>>     
>>     let s: String? = nil
>>     f(s)
>> 
>> then at runtime it will call 
>>     f([NSNull null])
>> ?
>> 
>> The problem is that NSNull is in fact rare in Cocoa. They are used in the 
>> Foundation containers and almost nowhere else. Passing NSNull into almost 
>> any API is going to do something confusing at runtime. If you're lucky you 
>> get a prompt error "-[NSNull something]: unrecognized selector". If you're 
>> not lucky you'll get that error somewhere much later, or something even less 
>> obviously related to NSNull and your call site. That sounds like the wrong 
>> outcome for developers who are confused or careless or unaware of an 
>> optional.
> 
> I agree, particularly since passing an array of optionals to an Objective-C 
> API is much more likely to be the result of a typo or other programmer error 
> than something actually intentional that ought to invoke the bridge.
> 
> Charles
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to