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

Brent Royal-Gordon brent at architechies.com
Thu May 19 04:31:07 CDT 2016

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

More information about the swift-evolution mailing list