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

Greg Parker gparker at apple.com
Wed Aug 24 20:27:41 CDT 2016


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


-- 
Greg Parker     gparker at apple.com <mailto:gparker at apple.com>     Runtime Wrangler


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160824/25ba3223/attachment.html>


More information about the swift-evolution mailing list