Swift 中双问号“??”有什么作用?


在本教程中,您将学习在 Swift 语言中使用双问号(??)。

在 Swift 中,双问号 (??) 称为“空合并运算符”。此运算符主要用于在为空值时提供默认值。换句话说,当变量为空值并且您希望在没有值的情况下提供默认值时,请使用此运算符。

根据 Apple 文档

空合并运算符 (a ?? b) 如果 a 包含值则解包 a,如果 a 为空则返回默认值 b。表达式 a 始终为可选类型。表达式 b 必须与存储在 a 中的类型匹配。

语法

a != nil ? a! : b

根据语法,如果值 a 不等于 nil,它将返回 a 的包装值;否则返回 b 值。此处 b 值的类型与 a 类型相同。

基本签名

我们可以通过使用以下语法来了解此运算符的内部工作方式:

public func ?? (optional: T?,
defaultValue: @autoclosure () throws -> T) rethrows -> T {
   switch optional {
      case .some(let value):
      return value
      case .none:
      return try defaultValue()
   }
}

让我们通过一些例子来了解它

示例

// declaring a student structure
struct Student {

   // student properties
   var name: String?
   var age: Int?
   var score: Double?
   
   // created a function to display the student information
   func displayInformation() {
      print("Name: \(name ?? "NA")")
      print("Age: \(age ?? 18)")
      print("Score: \(score ?? 0.0)")
   }
}

// created an object called amit
let amit = Student(name: "Amit Sharma", age: nil, score: 8.9)

// displaying information
amit.displayInformation()

输出

Name: Amit Sharma
Age: 18
Score: 8.9

解释

在上面的例子中,您可以看到我们正在显示无值情况下的默认值。由于在这种情况下 age 为 nil,我们正在传递一个默认值来代替 nil 值。

最后,Swift 语言中还有一些其他与空合并运算符类似的运算符。让我们了解它们之间的基本区别,以避免混淆。

它们之间的区别

  • 单问号 (?)

  • 它用于使变量成为可选类型。它写在变量名称之后。

  • 双问号 (??)

  • 它用于提供默认值。它也称为空合并运算符。

  • 带冒号的单问号 (?:)

  • 此运算符称为三元运算符。它用于执行语句的流程。基本上,您可以说它是 if-else 语句的简写形式。使用它,您可以匹配多个条件并相应地返回值。

  • 可选链 (?.)

  • 它用于将任何可选变量或属性进一步链接到其他属性或函数调用。

结论

此运算符对于在为空值时提供默认值非常有用。很多时候,您会在代码中处理可选变量,为了处理 nil 值,此运算符工作得很好。它使代码更易读且简洁。

如果您的代码需要默认值,请随时使用此运算符。

更新于:2022年12月9日

2K+ 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告