[swift-evolution] [swift-evolution-announce] [Review] SE-0083: Remove bridging conversion behavior from dynamic casts

Jordan Rose jordan_rose at apple.com
Mon May 23 22:22:44 CDT 2016


Let’s see…

let name = plist[“name”].bridge() as String

Not the worst, but definitely better than any of the alternatives below. Unfortunately, I think that “if” is out of the question, at least for Swift 3.

Jordan

> On May 23, 2016, at 20:21, Jed Lewison <jed.lewison at icloud.com> wrote:
> 
> If we could have extensions on AnyObject, a simple .bridge() would do the trick, right? (Assuming bridge was generic.) I think something along those lines was mentioned in the proposal.
> 
> Sent from my iPhone
> 
> On May 23, 2016, at 5:26 PM, Jordan Rose via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
> 
>> 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. 
>> 
>> Jordan
>> 
>> 
>>> On May 19, 2016, at 02:31, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org <mailto: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?
>>> 
>>> Yes.
>>> 
>>>> 	* 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
>>> Architechies
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>

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


More information about the swift-evolution mailing list