2017-08-09 41 views
0

我想追加字典裏面沒有值替換它,例如:如何在不替換字典的情況下爲字典添加值?

var dict = [String:Any]() 
dict["login"] = ["user" : "jon"] 
//... 
//... 
//... 
dict["login"] = ["password": "1234"] 

當我嘗試添加值在第二次登陸,它的覆蓋第一個值。
如何追加這些數據?
我用斯威夫特3.

  • 編輯:讓我重複我的問題一點點。 我想建立一個動態字典,我將它作爲身體參數發佈到alamoFire。所以,如果我有一個看起來像這樣的JSON:

    { 
    "name" : "Jon", 
    "details" : { 
           "occupation" : "lifeguard" 
           "years_of_ex" : 3 
    } 
    "more_details" : "extra info" 
    "inner_body" : { 
           "someInfo" : "extra info" 
    } 
    ... // there might be lots of other fields since it's dynamic 
    ... // the server expect to have missing fields and not empty ones 
    } 
    

我要添加動態細節,因爲我不知道我的解釋將如何模樣。 所以增加值到詞典而不覆蓋它們對我來說是必須的。

+0

'字典[「登錄」] [「密碼」] =「1234 「'但更重要的一點...是否有一個原因,你用這個字典,而不是一個結構或類? – Alexander

+0

是的,我需要Alamofire身體參數字典..我編輯我的問題,所以它會更清晰 – XcodeNOOB

+0

只是一個建議,你可以看看[SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON)這使得在Swift中使用JSON數據非常簡單。它使代碼更加可讀,可選的包裝自動完成。 –

回答

0

爲了反映在問題中的編輯:不知道字典的確切結構,你不能隨意修改它。無論如何,直接修改JSON字典是非常糟糕的做法。

將JSON響應解析爲自定義對象,根據需要修改對象,然後將對象編碼回JSON並將其用作請求的主體。

如果您不想自己編寫JSON解析函數,請查看ObjectMapper。它既可以將JSON響應映射到對象,也可以將對象映射到JSON。

+0

我編輯了我的問題... – XcodeNOOB

+0

@XcodeNOOB檢查我編輯的答案 –

1

定義一箇中間變量,並分配給它:

var dict = [String:Any]() 
dict["login"] = ["user" : "jon"] 

if var login = dict["login"] as? [String: String] { 
    login["password"] = "1234" 
    dict["login"] = login 
} 
+0

我編輯了我的問題... – XcodeNOOB

+0

您將很快失去跟蹤哪些項目在您的字典中,哪些不是。你已經可以看到操縱字典是一件小事。我強烈建議你定義一個'struct'來包含所有可能的數據。對於Swift 3,你可以使用ObjectMapper將它轉換爲JSON。對於Swift 4來說,你可以查看「Codable」。 –

+0

我在GitHub上看到了ObjectMapper,但有可能將它轉換爲字典嗎?如果我需要一些數據呢?我怎樣才能避免無字段? – XcodeNOOB

0

你不能直接「追加」的新值到DINAMIC字典不知道的類型和內容。

由於

dict["login"] 

回報你一個Any?你有沒有辦法直接操縱它。

你對每個字典葉的內容的可能組合有任何想法嗎?

你可以寫,試圖向下轉換葉片和底座上的內容的遞歸方法,嘗試做一些

switch dict["login"] { 
    case is [String: Any?]: 
     // check that the key does not already exist, to not replace it 
    case is [Int: Any?]: 
     // Do something else 

}