2016-03-02 35 views
1

我有一個關於詞典詞典的問題。在Dict中放置單個元素的方法比我做得更簡單嗎?詞典字典中設置單個元素

var cellHeight = [ Int : [ Int : CGFloat ] ]() 

// ... 

if let _ = cellHeight[0] { 
    cellHeight[0]![2] = 0.0 
} else { 
    cellHeight[0] = [ 2 : 0.0 ] 
} 

在所有我檢查的唯一解釋如何填寫/初始化全字典-的快譯通,比從中讀取,而不是如何通過部分填充部分的教程。

回答

1

你在做什麼基本上是正確的。你可以稍微更優雅,就像這樣:

let didit = cellHeight[0]?[2] = 0 // yields an Optional<Void> 
if didit == nil { // that didn't work, so create the entry 
    cellHeight[0] = [2:0] 
} 

而且可以進一步收緊,而無需額外的變量:

if nil == (cellHeight[0]?[2] = 0) { 
    cellHeight[0] = [2:0] 
} 

如果這是你的代碼的重複模式,您可以當然可以將它抽象爲一個函數。

2

只需添加元素。如果一個詞典的輸入不存在,向該鍵添加一個元素將創建一個。如果一個鍵已經存在,那麼添加一個元素將會覆蓋舊鍵。從不存在的字典鍵讀取將返回零。從字典中讀取返回一個可選項。 enter image description here

+0

不幸的是,這不起作用,因爲如果已經有cellHeight [0]的子字典,它們將被替換爲新字典。這就是我執行復雜結構來檢查是否已經有子字典並處理它們的原因。看到這裏:[截圖](http://imgur.com/ZTHhAtp) – falsch