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 值,此运算符工作得很好。它使代码更易读且简洁。
如果您的代码需要默认值,请随时使用此运算符。
广告