Eu tenho um dicionário simples que é definido como:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Agora eu quero adicionar um elemento neste dicionário: 3 : "efg"
Como posso acrescentar 3 : "efg"
a este dicionário existente?
Eu tenho um dicionário simples que é definido como:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
Agora eu quero adicionar um elemento neste dicionário: 3 : "efg"
Como posso acrescentar 3 : "efg"
a este dicionário existente?
Respostas:
Você está usando NSDictionary
. A menos que você precise explicitamente desse tipo por algum motivo, recomendo o uso de um dicionário Swift.
Você pode passar um dicionário Swift para qualquer função esperando NSDictionary
sem qualquer trabalho extra, porque Dictionary<>
e NSDictionary
perfeitamente colmatar um ao outro. A vantagem da maneira Swift nativa é que o dicionário usa tipos genéricos; portanto, se você o definir Int
como chave e String
como valor, não poderá usar por engano chaves e valores de tipos diferentes. (O compilador verifica os tipos em seu nome.)
Com base no que vejo no seu código, seu dicionário usa Int
como chave e String
como valor. Para criar uma instância e adicionar um item posteriormente, você pode usar este código:
var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"
Se você precisar atribuí-lo posteriormente a uma variável do NSDictionary
tipo, basta fazer uma conversão explícita:
let nsDict = dict as! NSDictionary
E, como mencionado anteriormente, se você deseja passá-lo para uma função que está esperando NSDictionary
, passe-o como está sem qualquer conversão ou conversão.
Dictionary
objeto e, em seguida, convertê-lo NSDictionary
no final, se necessário. Maravilhoso. Obrigado.
você pode adicionar usando da seguinte maneira e alterar Dictionary
paraNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
.. Errofatal error: unexpectedly found nil while unwrapping an Optional value
Eu sei que isso pode estar chegando muito tarde, mas pode ser útil para alguém. Portanto, para anexar pares de valores-chave a dicionários no swift, você pode usar o método updateValue (value:, forKey:) da seguinte maneira:
var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)
SWIFT 3 - XCODE 8.1
var dictionary = [Int:String]()
dictionary.updateValue(value: "Hola", forKey: 1)
dictionary.updateValue(value: "Hello", forKey: 2)
dictionary.updateValue(value: "Aloha", forKey: 3)
Portanto, seu dicionário contém:
dicionário [1: Hola, 2: Olá, 3: Aloha]
dictionary[1] = "Hola"
?
Se o seu dicionário é Int
para String
você, basta:
dict[3] = "efg"
Se você quer adicionar elementos ao valor do dicionário, uma possível solução:
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
No Swift, se você estiver usando o NSDictionary , poderá usar setValue
:
dict.setValue("value", forKey: "key")
Dados dois dicionários, como abaixo:
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
Aqui está como você pode adicionar todos os itens de dic2 a dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
Saúde A.
.forEach
em vez de .map
como nós não precisa de nenhum retorno variedade mapeados
Dict.updateValue
atualiza o valor da chave existente do dicionário ou adiciona um novo par de valores-chave se a chave não existir.
Exemplo-
var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")
Resultado-
▿ : 2 elements
- key : "userId"
- value : 866
▿ : 2 elements
- key : "otherNotes"
- value : "Hello"
Para os bolsistas que usam em [String:Any]
vez de Dictionary
abaixo está a extensão
extension Dictionary where Key == String, Value == Any {
mutating func append(anotherDict:[String:Any]) {
for (key, value) in anotherDict {
self.updateValue(value, forKey: key)
}
}
}
A partir do Swift 5, a seguinte coleção de códigos funciona.
// main dict to start with
var myDict : Dictionary = [ 1 : "abc", 2 : "cde"]
// dict(s) to be added to main dict
let myDictToMergeWith : Dictionary = [ 5 : "l m n"]
let myDictUpdated : Dictionary = [ 5 : "lmn"]
let myDictToBeMapped : Dictionary = [ 6 : "opq"]
myDict[3]="fgh"
myDict.updateValue("ijk", forKey: 4)
myDict.merge(myDictToMergeWith){(current, _) in current}
print(myDict)
myDict.merge(myDictUpdated){(_, new) in new}
print(myDict)
myDictToBeMapped.map {
myDict[$0.0] = $0.1
}
print(myDict)
Não há função para acrescentar os dados no dicionário. Você acabou de atribuir o valor à nova chave no dicionário existente. agregará automaticamente valor ao dicionário.
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
A saída será como
["Nome": "Aloha", "usuário": "Aloha 2", "perguntas": "" Você é meu "?"]
For whoever reading this for swift 5.1+
// 1. Using updateValue to update the given key or add new if doesn't exist
var dictionary = [Int:String]()
dictionary.updateValue("egf", forKey: 3)
// 2. Using a dictionary[key]
var dictionary = [Int:String]()
dictionary[key] = "value"
// 3. Using subscript and mutating append for the value
var dictionary = [Int:[String]]()
dictionary[key, default: ["val"]].append("value")
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "sample@email.com"
print(dict)
Até agora, a melhor maneira que encontrei de anexar dados a um dicionário usando uma das funções de ordem superior do Swift, ou seja, "reduzir". Siga o trecho de código abaixo:
newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }
@ Dharmesh No seu caso, será,
newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }
Entre em contato se encontrar algum problema ao usar a sintaxe acima.
Codificação feliz do Swift 5
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
Eu adicionei extensão Dictionary
extension Dictionary {
func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
var result = self
dict.forEach { key, value in result[key] = value }
return result
}
}
você pode usar cloneWith
assim
newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }
se você deseja modificar ou atualizar o NSDictionary, primeiro digite-o como NSMutableDictionary
let newdictionary = NSDictionary as NSMutableDictionary
então simplesmente use
newdictionary.setValue(value: AnyObject?, forKey: String)