[swift-evolution] ternary operator ?: suggestion

Brent Royal-Gordon brent at architechies.com
Thu Dec 17 01:09:12 CST 2015

> My reason for suggesting the change is that it would be nice to have a one liner for non-boolean values. Especially when the mapping isn't likely to be reused anyplace else. I run into this a fair amount, and the inline way I do it (via a Dict) requires a lot of verbosity (keys are likely to be Enums and need to be explicitly declared for the Dict).

You can improve the ergonomics of this with a custom operator:

	infix operator ??? {}		// Used because ? is reserved; in practice, you should use something else.
	func ???<Key, Value>(key: Key, dictionary: [Key: Value]) -> Value {
	    return dictionary[key]!
	let alignment = NSTextAlignment.Left
	alignment ??? [.Left: "Left", .Right: "Right", .Center: "Center", .Justified: "Justified"]

Actually, this *almost* does what you want. No @autoclosure for the values and no exhaustiveness checking, but otherwise...

Brent Royal-Gordon

More information about the swift-evolution mailing list