> On Aug 24, 2016, at 8:27 PM, Greg Parker via swift-evolution 
> <[email protected]> wrote:
> 
>> On Aug 23, 2016, at 3:36 PM, Douglas Gregor via swift-evolution 
>> <[email protected] <mailto:[email protected]>> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to