Swift: Deklarieren Sie ein leeres Wörterbuch


177

Ich swiftfange The Swift Programming Languagean zu lernen, indem ich dem von Apple bereitgestellten iBookon Swift folge . Das Buch sagt, um ein leeres Wörterbuch zu erstellen, sollte man [:]dasselbe verwenden, während man das Array deklariert als []:

Ich habe ein leeres Array wie folgt deklariert:

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

Beim Deklarieren eines leeren Wörterbuchs wird jedoch ein Syntaxfehler angezeigt:

let emptyDict = [:]

Wie deklariere ich ein leeres Wörterbuch?


2
komisch, ich bekomme keinen Fehler dabei, ich kann sogar nach der Zählung fragen und der Spielplatz gibt mir 0.
Kaan Dedeoglu

Mine tut jeder Compiler - Fehler geben , auch von der Laufzeit ich ein println der Konstanten erhalten können und sie drucken nur diese in der Konsole array :() dictionary :{}print - Anweisungen let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
NSUInteger


Antworten:


309
var emptyDictionary = [String: String]()

­

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

Hinweis : Wenn Sie den Inhalt des Wörterbuchs im Laufe der Zeit ändern möchten, deklarieren Sie es als var(Variable). Sie können ein leeres Wörterbuch als let(Konstante) deklarieren, aber es ist sinnlos, wenn Sie beabsichtigen, seinen Inhalt im Laufe der Zeit zu ändern, da die Konstante nach ihrer Initialisierung nicht mehr geändert werden kann.


Alte Antwort :

Das Erstellen eines leeren Wörterbuchs <String, String>sieht wie folgt aus:

var emptyDictionary = Dictionary<String, String>()

Danke Kumpel, das funktioniert. Aber warum kann ich das Wörterbuch nicht als konstant deklarieren, wenn ich ein Array als konstant deklarieren kann?
22.

2
Sicherlich konnten Sie ein const-Wörterbuch nicht deklarieren und leer machen? WIE würden Sie niemals Werte hinzufügen können?
CW0007007

1
Sie können ein leeres Array als Konstante deklarieren, aber es ist sinnlos. Wenn Sie die Dokumente lesen, können Sie sehen, dass ein Array immer so deklariert wird, varwie ich es Ihnen vorgeschlagen habe: developer.apple.com/library/prerelease/ios/documentation/Swift/…
damirstuhec

1
@ Damir179 die erste Zeile ist einfach falsch. Da dort keine Typinformationen vorhanden sind, müssen Sie explizit sein, da sonst eine unbrauchbare Instanz von erstellt wird __NSDictionaryI. Versuchen Sie, ein Element hinzuzufügen, das emptyDictbeim Kompilieren fehlschlägt.
Gabriele Petronella

1
var emptyDict: NSMutableDictionary = [:]
Jio

39

Sie können nur verwenden, [:]wenn Typinformationen verfügbar sind.

In diesem Fall müssen Sie dies explizit angeben:

var dict = Dictionary<String, String>()

varbedeutet, dass es veränderbar ist, sodass Sie Einträge hinzufügen können. Umgekehrt, wenn Sie es zu einem machen, können letSie es nicht weiter modifizieren ( letbedeutet konstant).

Sie können die [:]Kurzschreibweise verwenden, wenn beispielsweise auf die Typinformationen geschlossen werden kann

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

// stuff

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

Im letzten Beispiel ist bekannt, dass das Wörterbuch einen Typ Dictionary<String, String>in der ersten Zeile hat. Beachten Sie, dass Sie es nicht explizit angeben mussten, aber es wurde abgeleitet.


Von den vielen Optionen, die in Swift verfügbar sind, lautet meine Lieblingssyntax für ein einfaches String / String- var dict: [String: String] = [:]
Diktat

Danke dir!. Dictionary <String, String> () hat mein Problem behoben. Ich hatte tatsächlich ein Wörterbuch von Enum bis MyClass. Was meinen Sie mit "Typinformationen sind verfügbar"?
Eduardo Reis

32

In der Swift-Dokumentation wird die folgende Methode zum Initialisieren eines leeren Wörterbuchs empfohlen:

var emptyDict = [String: String]()

Ich war ein wenig verwirrt, als ich zum ersten Mal auf diese Frage stieß, weil verschiedene Antworten verschiedene Möglichkeiten zeigten, ein leeres Wörterbuch zu initialisieren. Es stellt sich heraus, dass es tatsächlich viele Möglichkeiten gibt, dies zu tun, obwohl einige etwas überflüssig oder übermäßig ausführlich sind, da Swift in der Lage ist, auf den Typ zu schließen.

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

Nachdem Sie ein leeres Wörterbuch haben, können Sie ein Schlüssel-Wert-Paar wie folgt hinzufügen:

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

Wenn Sie Ihr Wörterbuch erneut leeren möchten, können Sie Folgendes tun:

emptyDict = [:]

Die Typen sind immer noch, <String, String>weil es so initialisiert wurde.


Wenn Sie ein Array eines leeren Wörterbuchs initialisieren möchten, tun Sie dies als solches: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro

19

Verwenden Sie dies wird funktionieren.

var emptyDict = [String: String]()

Ich bevorzuge dieses hier. Weil wir ein leeres Array mit deklarieren können var emtpyAry = [String](). Das macht Sinn.
hbin

16

Sie können es einfach so deklarieren:

var emptyDict:NSMutableDictionary = [:]

6

Sie müssen dem Wörterbuch einen Typ geben

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

Wenn der Compiler auf den Typ schließen kann, können Sie die kürzere Syntax verwenden

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


4

Ich spiele auch damit. Es scheint seltsam, dass Sie einfach ein leeres Wörterbuch deklarieren und dann ein Schlüssel / Wert-Paar hinzufügen können:

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

Sie können jedoch ein Wörterbuch erstellen, das verschiedene Werttypen akzeptiert, indem Sie den Typ "Beliebig" wie folgt verwenden:

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

4

Sie müssen den Datentyp explizit angeben, oder der Typ kann abgeleitet werden, wenn Sie etwas in Swift deklarieren.

Swift 3

Im folgenden Beispiel wird ein Wörterbuch mit dem Schlüssel als IntTyp und dem Wert als StringTyp deklariert .

Methode 1: Initialisierer

let dic = Dictionary<Int, String>()

Methode 2: Kurzsyntax

let dic = [Int:String]()

Methode 3: Wörterbuchliteral

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

Wenn Sie ein generisches Wörterbuch mit einem beliebigen Typ erstellen möchten

var dictionaryData = [AnyHashable:Any]()

Vielen Dank, schließlich, weil dies benötigt wird, um später einen Wörterbuchtyp hinzuzufügen, nicht nur eine Zeichenfolge
Mitchell Currie

3

Ich benutze normalerweise

var dictionary:[String:String] = [:]
dictionary.removeAll()

3

Wörterbücher in Swift deklarieren und initialisieren

Wörterbuch der Zeichenfolge

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

ODER

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

Wörterbuch von Int

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

ODER

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

Wörterbuch von AnyObject

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

ODER

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

Wörterbuch des Array of String

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

ODER

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

Array von Wörterbüchern von String

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

ODER

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

0

Sie können es wie folgt mit Null deklarieren:

var assoc : [String:String]

Dann ist es schön, dass Sie bereits gesetzt haben (beachten Sie, dass ich var verwendet habe und nicht zulasse, betrachten Sie diese als veränderlich und unveränderlich). Dann können Sie es später füllen:

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

0

Sie können den folgenden Code verwenden:

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

-1

var dictList = String: String für Wörterbuch in Swift var arrSectionTitle = String für Array in Swift


-2

Es ist sehr praktisch, um sich zurechtzufinden

var dict: Dictionary = [:]


Sie müssen auch die Schlüssel- und Werttypen verwenden.
Suragch

-2
var parking = [Dictionary < String, Double >()]

^ Dies fügt ein Wörterbuch für eine [string: double] -Eingabe hinzu

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.