2017-11-18 187 views
2

我遇到了使用雙重問號(「??」)的Swift語法。「??」是什麼意思?在迅速?

例如,let val = something["something"] as? String ?? nil

究竟是什麼意思?這個語法有什麼用例?

+2

它被稱爲零合併運算符,但如果你通過'無'它沒有任何意義。 –

+0

請注意,您的結果對象將爲可選字符串 –

+0

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID72 – jtbandes

回答

2

未繳合併運算

這有點這個簡短的形式。 (意味着可以分配默認值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 here

+0

'let val = something [「something」] as? String!= nil?某事[「某事」]!字符串:「默認值」 –

+1

謝謝,我錯過了,更新了答案。 – Bilal

+0

更新爲''默認值''。謝謝。 – Bilal

1

這是夫特Nil-Coalescing Operator

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。所以這裏不需要這個操作員。

1

此運算符通常用於在分配的表達式或變量產生可選結果時提供默認值。爲前:

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不會對結果沒有任何結果。

+0

是的,這就是爲什麼寫它沒有意義 – Pranshu