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