[swift-evolution] [swift-evolution-announce] [Review] SE-0083: Remove bridging conversion behavior from dynamic casts
jordan_rose at apple.com
Mon May 23 19:26:38 CDT 2016
I am way late, but I share Brent’s concerns. I don’t think this addresses the very common case of “getting a String out of a heterogeneous dictionary”.
let name = plist[“name”] as! String
becomes one of these:
let name = plist[“name”] as! NSString as String
let name = String(plist[“name”] as! NSString)
let name = String(forceBridging: plist[“name”]) // not in the proposal
none of which I’m particularly happy with.
> On May 19, 2016, at 02:31, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org> wrote:
>> * What is your evaluation of the proposal?
> The review is technically over, but I don't believe a decision has been announced yet, so...
> I am generally in favor, but I have a serious concern about the readability of certain conversions with this change. To wit, conversions like these:
> myArray as! [NSView]
> myDictionary as! [String: NSView]
> Are about to become something more like these:
> [NSView](forcedLazyBridging: myArray)
> [String: NSView](forcedLazyBridging: myDictionary)
> Or these:
> Array<NSView>(forcedLazyBridging: myArray)
> Dictionary<String, NSView>(forcedLazyBridging: myDictionary)
> Either option is a significant regression in code readability compared to the status quo.
> It's enough to make me wonder if we shouldn't have special-cased conversion methods for NSArray, NSDictionary, and NSSet:
> myArray.of(NSView) // returns [NSView]
> myDictionary.of(NSView, for: String) // returns [String: NSView]
> mySet.of(NSView) // returns Set<NSView>
> On the other hand, if you *don't* have to specify an element type, these aren't so bad:
> Array(forcedLazyBridging: myArray)
> Dictionary(forcedLazyBridging: myDictionary)
> And it gets even better if you use something a little saner than `forcedLazyBridging` for the label.
>> * Is the problem being addressed significant enough to warrant a change to Swift?
> Yes. Conversions are a mess, and it'll be nice to clean them up.
>> * Does this proposal fit well with the feel and direction of Swift?
>> * If you have used other languages or libraries with a similar feature, how do you feel that this proposal compares to those?
> Most languages I've used have had much simpler cast systems with nothing particularly close to Swift's bridging casts.
>> * How much effort did you put into your review? A glance, a quick reading, or an in-depth study?
> Quick reading.
> Brent Royal-Gordon
> swift-evolution mailing list
> swift-evolution at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-evolution