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?


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


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>()

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.


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é.


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]()

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 = [:]

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


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"

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()

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()

3

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

var dictionaryData = [AnyHashable:Any]()

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()

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>>()

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"]

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] = [:]

-1

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


-2

C'est très pratique pour trouver votre chemin

var dict: Dictionnaire = [:]


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]

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.