Swift: déclarer un dictionnaire vide

178

Je commence à apprendre swiften suivant l'iBook- The Swift Programming Languageon Swift fourni par Apple. Le livre dit que pour créer un dictionnaire vide, il faut utiliser la [:]même chose que pour déclarer un tableau comme []:

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

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

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

let emptyDict = [:]

Comment déclarer un dictionnaire vide?

z22
la source
2
bizarre, je n'obtiens aucune erreur en faisant cela, je peux même demander le décompte et le terrain de jeu me donne 0.
Kaan Dedeoglu
le mien ne donne aucune erreur de compilation, même à partir de l'exécution, je peux obtenir un println des constantes et ils impriment simplement ceci dans array :() dictionary :{}les instructions d'impression de la console let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
nsuinteger
Vérifiez ce lien
Juan Boero

Réponses:

310
var emptyDictionary = [String: String]()

­

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

Remarque : si vous souhaitez modifier le contenu du dictionnaire au fil du temps, déclarez-le comme une var(variable). Vous pouvez déclarer un dictionnaire vide comme une let(constante), mais cela ne sert à rien si vous avez l'intention de modifier son contenu au fil du temps, car la constante ne peut pas être modifiée après son initialisation.


Ancienne réponse :

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

var emptyDictionary = Dictionary<String, String>()
damirstuhec
la source
Merci mon pote, ça marche. Mais pourquoi ne puis-je pas déclarer le dictionnaire comme constante si je peux déclarer un tableau comme constante?
z22
2
Vous ne pouvez sûrement pas déclarer un dictionnaire const et le rendre vide? COMME vous ne seriez jamais en mesure d'y ajouter des valeurs?
CW0007007
1
Vous pouvez déclarer un tableau vide comme une constante mais c'est inutile. Si vous lisez la documentation, vous pouvez voir qu'un tableau est toujours déclaré varcomme je vous l'ai suggéré: developer.apple.com/library/prerelease/ios/documentation/Swift/…
damirstuhec
1
@ Damir179 la première ligne est tout simplement fausse. Il n'y a pas d'informations de type ici, vous devez donc être explicite, sinon vous produirez une instance inutilisable de __NSDictionaryI. Essayez d'ajouter un élément à cela emptyDictet cela échouera au moment de la compilation.
Gabriele Petronella
1
var emptyDict: NSMutableDictionary = [:]
Jio
39

Vous ne pouvez pas utiliser tant [:]que les informations de type ne sont pas disponibles.

Vous devez le fournir explicitement dans ce cas:

var dict = Dictionary<String, String>()

varsignifie qu'il est modifiable, vous pouvez donc y ajouter des entrées. Inversement, si vous en faites un, letvous ne pouvez plus le modifier ( letsignifie 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 un type Dictionary<String, String>à la première ligne. Notez que vous n'avez pas eu à le spécifier explicitement, mais il a été déduit.

Gabriele Petronella
la source
Parmi les nombreuses options disponibles dans Swift, ma syntaxe préférée pour un simple dict String / String est:var dict: [String: String] = [:]
Dawngerpony
Je vous remercie!. Dictionary <String, String> () a résolu mon problème, j'avais en fait un dictionnaire d'Enum vers MyClass. Qu'entendez-vous par «informations de type disponibles»?
Eduardo Reis
32

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

var emptyDict = [String: String]()

J'étais un peu confus 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. Il s'avère qu'il existe en fait de nombreuses façons de le faire, bien que certaines soient un peu redondantes ou trop verbeuses étant donné 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 celle-ci:

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

Si vous souhaitez à nouveau vider votre dictionnaire, vous pouvez effectuer les opérations suivantes:

emptyDict = [:]

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

Suragch
la source
Si vous vouliez initialiser un tableau d'un dictionnaire vide, vous le feriez comme tel: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro
19

Utilisez cela fonctionnera.

var emptyDict = [String: String]()
Lim Thye Chean
la source
Je préfère celui-ci. Parce que nous pouvons déclarer un tableau vide par var emtpyAry = [String](). C'est logique.
hbin
16

Vous pouvez simplement le déclarer comme ceci:

var emptyDict:NSMutableDictionary = [:]
Jio
la source
6

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
roi nevan
la source
5

Rapide:

var myDictionary = Dictionary<String, AnyObject>()
Juan Boero
la source
4

Je joue avec ça aussi. Il semble étrange que vous puissiez simplement déclarer un dictionnaire vide, puis y 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"
Lee Probert
la source
4

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 la clé comme Inttype et la valeur comme Stringtype.

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()
Lorem Ipsum Dolor
la source
4

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()
Shakeel Ahmed
la source
3

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

var dictionaryData = [AnyHashable:Any]()
reetu
la source
Merci, enfin parce que cela est nécessaire pour ajouter un type de dictionnaire plus tard, pas seulement une chaîne
Mitchell Currie
3

J'utilise habituellement

var dictionary:[String:String] = [:]
dictionary.removeAll()
Lind el Loren
la source
3

Déclaration et initialisation de dictionnaires dans Swift

Dictionnaire de la chaîne

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

OU

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

Dictionnaire d'Int

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

OU

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

Dictionnaire AnyObject

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

OU

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

Dictionnaire de Array of String

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

OU

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

Tableau de dictionnaires de chaîne

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

OU

var stringDict: Array<Dictionary<String, String>> = Array<Dictionary<String, String>>()
Syed Qamar Abbas
la source
0

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

var assoc : [String:String]

Alors la bonne chose est que vous avez déjà composé (notez que j'ai utilisé var et not let, pensez à ceux-ci comme mutables et immuables). Ensuite, vous pouvez le remplir plus tard:

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

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] = [:]
levan
la source
-1

var dictList = String: Chaîne pour le dictionnaire en swift var arrSectionTitle = Chaîne pour le tableau en swift

Gaurav
la source
-2

C'est très pratique pour trouver votre chemin

var dict: Dictionnaire = [:]

Uttam Kumar
la source
Vous devez également utiliser les types clé et valeur.
Suragch
-2
var parking = [Dictionary < String, Double >()]

^ ceci ajoute un dictionnaire pour une entrée [string: double]

wildCard
la source