[swift-evolution] [Proposal draft] Bridge Optional As Its Payload Or NSNull

jaden.geller at gmail.com jaden.geller at gmail.com
Wed Aug 24 22:40:26 CDT 2016


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 at swift.org> wrote:
> 
>>> On Aug 24, 2016, at 8:27 PM, Greg Parker via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> On Aug 23, 2016, at 3:36 PM, Douglas Gregor via swift-evolution <swift-evolution at 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 at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160824/f43f0b69/attachment.html>


More information about the swift-evolution mailing list