2015-08-08 119 views
3

鑑於目錄和鍵增加或初始化一個Int最優化的方式,我想,如果它在字典中,或將其初始化到1在斯威夫特字典

的增加與鍵的值字典類型是字典,但通過設計,此鍵的值類型將始終爲Int,因爲它只會被此代碼更改。

我到目前爲止的代碼是在下面,但想要優化它,以迅捷的風格。

 let v = dict[key] as? Int 
     if v != nil { 
      dict[key] = v! + 1 
     } else { 
      dict[key] = 1 
     } 

回答

6

的一種方法是使用零合併運算符:

dict[key] = ((dict[key] as? Int) ?? 0) + 1 

如果你知道字典的類型,你幾乎可以做同樣的,但沒有鑄造:

dict[key] = (dict[key] ?? 0) + 1 

說明:

此運算符(??)在左側選擇一個d在右側不可選,如果不是nil,則返回可選值。否則,它將返回正確的值作爲默認值。

像這種三元運算表達式:

dict[key] ?? 0 
// is equivalent to 
dict[key] != nil ? dict[key]! : 0 
+1

我覺得右手邊?也可以是可選的,所以結果將是一個可選的,如果你有零?零,那麼結果將是零。方便的事情(firstChoice ?? secondChoice ?? thirdChoice ?? defaultValue) – gnasher729

+0

@ gnasher729你說得對。由於操作符在右側帶有一個可選的版本而過載。 – Qbyte