Swift在Ruby中是否具有"或等于"函数,如|| =?

ma1*_*w28 3 null-coalescing-operator swift

在Swift中,如何设置可选项,foo但仅限于它nil

我知道Swift的nil coalescing运算符:

foo = foo ?? "Hello"(在哪里foo可选String)

但是,有没有更好的方法,比如Ruby?

foo ||= "Hello"

Dan*_* T. 7

考虑并拒绝了这样的运营商:https://github.com/apple/swift-evolution/blob/master/proposals/0024-optional-value-setter.md

拒绝背后的理性应该是在swift-evolution电子邮件列表中,但是附加到上面的链接指向SE-0025而不是24.

这是理性的链接(由于Kenneth Bruno的评论打击而编辑):http://article.gmane.org/gmane.comp.lang.swift.evolution/7694

  • 实际上我相信这是发布的[理由的链接](http://article.gmane.org/gmane.comp.lang.swift.evolution/7694). (4认同)

小智 6

不,这就是这样做的方法。如果您愿意,可以将其包装在您自己的运算符中:

infix operator ||= {}
func ||=<T>(inout left: Optional<T>, right: T) { left = left ?? right }

var foo:String? = nil // foo -> nil
foo ||= "Hello"       // foo -> "Hello"
foo ||= "Hi"          // foo -> "Hello"
Run Code Online (Sandbox Code Playgroud)

我建议使用??=与图案相匹配的方式foo = foo ?? "Hello",但使用您觉得舒服的任何方式。