Swift 中的 ?= 运算符有什么作用?

What does the ?= operator do in Swift?

我刚看到一些代码,如下所示:

var msg:String = "";
msg ?= err["ErrorMessage"].text;

err 变量来自我在代码中看到的 SwiftyXMLParser。我不知道 ?=(问号等于)运算符的含义。我找不到关于它的文档。它在做什么?

这个问题在Swift语言中是一个很有趣的话题。

在其他编程语言中,它不允许运算符重载,而在 Swifty 术语中,它称为 自定义运算符。 Swift 有自己的标准运​​算符,但我们也可以添加其他运算符。 Swift 有 4 种运算符,其中前 3 种可用于自定义运算符:

  • Infix:用于两个值之间,如加法运算符(例如 1 + 2)
  • Prefix:添加在值之前,如否定运算符(例如-3)。
  • Postfix:添加在一个值之后,如force-unwrap运算符(例如objectNil!)
  • 三元:在三个值之间插入两个符号。

自定义运算符可以以 ASCII 字符 /、=、-、+、!、*、%、<、>、&、|、^、? 或 ~ 之一或 Unicode 字符之一开头.

新运算符使用 operator 关键字在全局级别声明,并标有前缀、中缀或后缀修饰符:

这是 playground 中的示例[Swift 4].

 infix operator ?=

 func ?= (base: inout String, with: String)
  {
     base = base + " " + with
  }

  var str = "Stack"
  str ?= "Overflow"
  print(str)

输出:

Stack Overflow

请检查苹果文档中的主题名称Advanced operator