web-dev-qa-db-fra.com

Swift: déclarer un dictionnaire vide

Je commence à apprendre Swift en suivant le code iBook -The Swift Programming Language sur Swift fourni par Apple. Le livre dit que pour créer un dictionnaire vide, il faut utiliser [:] comme lors de la déclaration d'un tableau comme []

J'ai déclaré un tableau vide comme suit:

let emptyArr = [] // or String[]()

Mais en déclarant dictionnaire vide, j'obtiens une erreur de syntaxe:

let emptyDict = [:]

Comment déclarer un dictionnaire vide?

152
z22
var emptyDictionary = [String: String]()

Le plus grand centre commercial

var populatedDictionary = ["key1": "value1", "key2": "value2"]

Remarque : si vous souhaitez modifier le contenu du dictionnaire au fil du temps, déclarez-le en tant que var (variable). Vous pouvez déclarer un dictionnaire vide sous la forme d'une let (constante), mais cela n'a aucun sens si vous avez l'intention de modifier son contenu au fil du temps, car constante ne peut plus être modifié après son initialisation.


Ancienne réponse :

Créer un dictionnaire vide de type <String, String> ressemblerait à ceci:

var emptyDictionary = Dictionary<String, String>()
268
damirstuhec

Vous ne pouvez pas utiliser [:] sauf si des informations de type sont disponibles.

Vous devez le fournir explicitement dans ce cas:

var dict = Dictionary<String, String>()

var signifie qu'il est mutable, vous pouvez donc y ajouter des entrées . À l'inverse, si vous le définissez en tant que let, vous ne pourrez plus le modifier (let signifie constant).

Vous pouvez utiliser la notation abrégée [:] si les informations de type peuvent être déduites, par exemple

var dict = ["key": "value"]

// stuff

dict = [:] // ok, I'm done with it

Dans le dernier exemple, le dictionnaire est connu pour avoir le type Dictionary<String, String> à la première ligne. Notez que vous n'aviez pas à le spécifier explicitement, mais cela a été déduit.

38

La documentation Swift recommande la méthode suivante pour initialiser un dictionnaire vide:

var emptyDict = [String: String]()

J'étais un peu perplexe lorsque je suis tombé sur cette question pour la première fois, car différentes réponses montraient différentes façons d'initialiser un dictionnaire vide. En fait, il existe de nombreuses façons de le faire, même si certaines sont un peu redondantes ou trop verbeuses compte tenu de la capacité de Swift à déduire le type. 

var emptyDict = [String: String]()
var emptyDict = Dictionary<String, String>()
var emptyDict: [String: String] = [:]
var emptyDict: [String: String] = [String: String]()
var emptyDict: [String: String] = Dictionary<String, String>()
var emptyDict: Dictionary = [String: String]()
var emptyDict: Dictionary = Dictionary<String, String>()
var emptyDict: Dictionary<String, String> = [:]
var emptyDict: Dictionary<String, String> = [String: String]()
var emptyDict: Dictionary<String, String> = Dictionary<String, String>()

Une fois que vous avez un dictionnaire vide, vous pouvez ajouter une paire clé-valeur comme ceci:

emptyDict["some key"] = "some value"

Si vous souhaitez vider votre dictionnaire à nouveau, vous pouvez procéder comme suit:

emptyDict = [:]

Les types sont toujours <String, String> car c'est ainsi qu'il a été initialisé.

26
Suragch

Utilisez ceci fonctionnera.

var emptyDict = [String: String]()
19
Lim Thye Chean

Vous pouvez simplement le déclarer comme ceci:

var emptyDict:NSMutableDictionary = [:]
15
Jio

Vous devez donner un type au dictionnaire

// empty dict with Ints as keys and Strings as values
var namesOfIntegers = Dictionary<Int, String>()

Si le compilateur peut déduire le type, vous pouvez utiliser la syntaxe plus courte

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type Int, String
6
nevan king

Rapide:

var myDictionary = Dictionary<String, AnyObject>()
5
Juan Boero

Swift 4 

let dicc = NSDictionary()

//MARK: - This is empty dictionary
let dic = ["":""]

//MARK:- This is variable dic means if you want to put variable 
let dic2 = ["":"", "":"", "":""]

//MARK:- Variable example
let dic3 = ["name":"Shakeel Ahmed", "imageurl":"https://abc?abc.abc/etc", "address":"Rawalpindi Pakistan"]

//MARK: - This is 2nd Variable Example dictionary
let dic4 = ["name": variablename, "city": variablecity, "Zip": variablezip]

//MARK:- Dictionary String with Any Object
var dic5a = [String: String]()
//MARK:- Put values in dic
var dic5a = ["key1": "value", "key2":"value2", "key3":"value3"]

var dic5b = [String:AnyObject]()
dic5b = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

or
//MARK:- Dictionary String with Any Object
let dic5 = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

//MARK:- More Easy Way
let dic6a = NSDictionary()
let dic6b = NSMutalbeDictionary()
4
Shakeel Ahmed

Je joue aussi avec ça. Il semble étrange que vous puissiez simplement déclarer un dictionnaire vide, puis lui ajouter une paire clé/valeur comme ceci:

var emptyDictionary = Dictionary<String, Float>()
var flexDictionary = [:]
emptyDictionary["brian"] = 4.5
flexDictionary["key"] = "value" // ERROR : cannot assign to the result of this expression

Mais vous pouvez créer un dictionnaire qui accepte différents types de valeur en utilisant le type "Tout" comme ceci:

var emptyDictionary = Dictionary<String, Any>()
emptyDictionary["brian"] = 4.5
emptyDictionary["mike"] = "hello"
4
Lee Probert

Vous devez indiquer explicitement le type de données ou le type peut être déduit lorsque vous déclarez quoi que ce soit dans Swift.

Swift 3

L'exemple ci-dessous déclare un dictionnaire avec clé comme type Int et la valeur comme type String.

Méthode 1: initialiseur

let dic = Dictionary<Int, String>()

Méthode 2: Syntaxe abrégée

let dic = [Int:String]()

Méthode 3: Dictionnaire littéral

var dic = [1: "Sample"]
// dic has NOT to be a constant
dic.removeAll()
3
Xinyang Li

Si vous voulez créer un dictionnaire générique avec n'importe quel type

var dictionaryData = [AnyHashable:Any]()
2
reetu

Déclaration et initialisation de dictionnaires dans Swift

Dictionnaire de ficelle

var stringDict: [String: String] = [String: String]()

OR

var stringDict: Dictionary<String, String> = Dictionary<String, String>()

Dictionnaire d'Int

var stringDict: [String: Int] = [String: Int]()

OR

var stringDict: Dictionary<String, Int> = Dictionary<String, Int>()

Dictionnaire de AnyObject

var stringDict: [String: AnyObject] = [String: AnyObject]()

OR

var stringDict: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()

Dictionnaire de tableau de chaîne

var stringDict: [String: [String]] = [String: [String]]()

OR

var stringDict: Dictionary<String, Array<String>> = Dictionary<String, Array<String>>()

Tableau de dictionnaires de cordes

var stringDict: [[String: String]] = [[String: String]]()

OR

var stringDict: Array<Dictionary<String, String>> = Array<Dictionary<String, String>>()
1
Syed Qamar Abbas

J'utilise habituellement 

var dictionary:[String:String] = [:]
dictionary.removeAll()
1
Lind el Loren

Vous pouvez le déclarer comme nul avec les éléments suivants:

var assoc : [String:String]

Dans ce cas, la bonne chose à faire est que vous avez déjà composé (notez que j’ai utilisé var et que je n’ai pas laissé, pensez-y comme mutable et immuable). Ensuite, vous pourrez le remplir plus tard:

assoc = ["key1" : "things", "key2" : "stuff"]
0
newshorts

Vous pouvez utiliser le code suivant:

var d1 = Dictionary<Int, Int>()
var d2 = [Int: Int]()
var d3: Dictionary<Int, Int> = [Int : Int]()
var d4: [Int : Int] = [:]
0
levan_amateur