?= 运算符在 Swift 中起什么作用?

Dav*_*tor 3 operators swift

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

var msg:String = "";
msg ?= err["ErrorMessage"].text;
Run Code Online (Sandbox Code Playgroud)

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

Raz*_*ick 6

这个问题是 Swift 语言中一个相当有趣的话题。

在其他编程语言中,它对运算符重载关闭,而在 Swifty 术语中,它称为自定义运算符。Swift 有自己的标准运​​算符,但我们也可以添加其他运算符。Swift 有 4 种类型的运算符,其中前 3 种可与自定义运算符一起使用:

  • 中缀:用于两个值之间,如加法运算符(例如 1 + 2)
  • 前缀:添加在值之前,如负运算符(例如-3)。
  • Postfix:添加在值之后,如强制展开运算符(例如 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)
Run Code Online (Sandbox Code Playgroud)

输出:

Stack Overflow
Run Code Online (Sandbox Code Playgroud)

请检查苹果文档中的主题名称高级运算符。