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 值,此運算子工作得很好。它使程式碼更易讀且簡潔。
如果您的程式碼需要預設值,請隨時使用此運算子。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP