我遇到了使用雙重問號(「??」)的Swift語法。「??」是什麼意思?在迅速?
例如,let val = something["something"] as? String ?? nil
究竟是什麼意思?這個語法有什麼用例?
我遇到了使用雙重問號(「??」)的Swift語法。「??」是什麼意思?在迅速?
例如,let val = something["something"] as? String ?? nil
究竟是什麼意思?這個語法有什麼用例?
未繳合併運算
這有點這個簡短的形式。 (意味着可以分配默認值nil
或任何其他值,如果是something["something"]
或nil
可選)
let val = (something["something"] as? String) != nil ? (something["something"] as! String) : "default value"
的零-合併運算符(一個14 B)解開,如果它包含一個值的可選一個,或返回一個如果a爲零,則默認值爲b。表達式a始終是可選類型。表達式b必須匹配存儲在a中的類型。
未繳合併運算符是下面的代碼簡寫:
A =零?一個! :b 上面的代碼使用三態條件運算符並強制解包(a!)來訪問a不是零時包裝的值,否則返回b。 nil-coalescing運算符提供了一種更簡潔的方式來以簡明易懂的形式封裝這個條件檢查和解包。
如果a的值不是零,則不評估b的值。這就是所謂的短路評估。
下面的示例使用了零-合併運算符默認顏色名稱和可選的用戶定義的顏色名稱之間進行選擇:
let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red"
這是夫特Nil-Coalescing Operator
。
的零-合併運算符(一個14 B)解開一個可選的一個,如果它 包含一個值,或者b,如果是零返回默認值。表達式a始終是可選類型。表達式b必須 與存儲在a中的類型匹配。
但在你的例子中,你已經在使用可選的結合,因此無需使用??
可選,如果失敗條件則自動分配nil
。
let val = something["something"] as? String ?? nil
這裏,something["something"] as? String
,已經分配nil
,如果something["something"]
未能提供String
。所以這裏不需要這個操作員。
此運算符通常用於在分配的表達式或變量產生可選結果時提供默認值。爲前:
let i: Int? = 5
let j: Int? = nil
let value1 = i ?? 9 //value1 will be 5 non-optional
let value2 = j ?? 9 //value2 will be 9 non-optional
您提供雖然語法正確的示例是多餘的,因爲省略?? nil
不會對結果沒有任何結果。
是的,這就是爲什麼寫它沒有意義 – Pranshu
它被稱爲零合併運算符,但如果你通過'無'它沒有任何意義。 –
請注意,您的結果對象將爲可選字符串 –
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID72 – jtbandes