> 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.


-- 
Greg Parker     gpar...@apple.com <mailto:gpar...@apple.com>     Runtime 
Wrangler


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

Reply via email to