Swift: zadeklaruj pusty słownik

178

Zaczynam się uczyć swiftZaczynam , śledząc iBook- The Swift Programming Languageon Swift dostarczony przez firmę Apple. Książka mówi, że aby stworzyć pusty słownik, należy użyć tego [:]samego, co przy deklarowaniu tablicy jako []:

Zadeklarowałem pustą tablicę w następujący sposób:

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

Ale po zadeklarowaniu pustego słownika pojawia się błąd składni:

let emptyDict = [:]

Jak zadeklarować pusty słownik?

z22
źródło
2
dziwne, nie dostaję błędu robiąc to, mogę nawet zapytać o liczenie i plac zabaw daje mi 0.
Kaan Dedeoglu
mój nie daje żadnego błędu kompilatora nawet w czasie wykonywania Mogę uzyskać println stałych i po prostu wypisują to w array :() dictionary :{}instrukcjach print konsoli let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
nsuinteger
Sprawdź ten link
Juan Boero

Odpowiedzi:

310
var emptyDictionary = [String: String]()

­

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

Uwaga : jeśli zamierzasz zmieniać zawartość słownika w czasie, zadeklaruj go jako var(zmienną). Państwo może oświadczyć pustego słownika postaci let(stała), ale to nie ma sensu, jeśli masz zamiar zmiany jego zawartości w czasie, ponieważ stała nie może być zmieniona po to został zainicjowany.


Stara odpowiedź :

Utworzenie pustego słownika typu <String, String>wyglądałoby następująco:

var emptyDictionary = Dictionary<String, String>()
damirstuhec
źródło
Dzięki stary, to działa. Ale dlaczego nie mogę zadeklarować słownika jako stałej, jeśli mogę zadeklarować tablicę jako stałą?
z22
2
Z pewnością nie mógłbyś zadeklarować słownika const i uczynić go pustym? JAKO nigdy nie byłbyś w stanie dodać do niego wartości?
CW0007007
1
Możesz zadeklarować pustą tablicę jako stałą, ale jest to bezcelowe. Jeśli przeczytasz dokumentację, zobaczysz, że tablica jest zawsze deklarowana tak, varjak sugerowałem: developer.apple.com/library/prerelease/ios/documentation/Swift/ ...
damirstuhec
1
@ Damir179 pierwsza linia jest po prostu błędna. Nie ma tam informacji o typie, więc musisz podać je wprost, w przeciwnym razie utworzysz bezużyteczne wystąpienie __NSDictionaryI. Spróbuj dodać do tego element, emptyDicta zakończy się niepowodzeniem w czasie kompilacji.
Gabriele Petronella
1
var emptyDict: NSMutableDictionary = [:]
Jio,
39

Nie możesz użyć, [:]chyba że informacje o typie są dostępne.

W takim przypadku musisz podać to wyraźnie:

var dict = Dictionary<String, String>()

varoznacza, że ​​jest zmienny, więc możesz dodawać do niego wpisy. I odwrotnie, jeśli zrobisz to leta, nie możesz go dalej modyfikować ( letoznacza to stałe).

Możesz użyć [:]notacji skróconej, jeśli na przykład informacje o typie można wywnioskować

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

// stuff

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

W ostatnim przykładzie wiadomo, że słownik ma typ Dictionary<String, String>w pierwszej linii. Zauważ, że nie trzeba było tego jawnie określać, ale zostało to wywnioskowane.

Gabriele Petronella
źródło
Spośród wielu opcji dostępnych w Swift, moją ulubioną składnią prostego var dict: [String: String] = [:]
dyktu typu
Dziękuję Ci!. Dictionary <String, String> () naprawił mój problem, w rzeczywistości miałem słownik z Enum do MyClass. Co rozumiesz przez „informacje o typie są dostępne”?
Eduardo Reis
32

Dokumentacja Swift zaleca następujący sposób inicjowania pustego słownika:

var emptyDict = [String: String]()

Byłem trochę zdezorientowany, kiedy po raz pierwszy natknąłem się na to pytanie, ponieważ różne odpowiedzi wskazywały na różne sposoby inicjalizacji pustego słownika. Okazuje się, że istnieje wiele sposobów, aby to zrobić, chociaż niektóre są trochę zbędne lub zbyt szczegółowe, biorąc pod uwagę zdolność Swifta do wywnioskowania typu.

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

Gdy masz pusty słownik, możesz dodać parę klucz-wartość w następujący sposób:

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

Jeśli chcesz ponownie opróżnić słownik, możesz wykonać następujące czynności:

emptyDict = [:]

Typy są nadal, <String, String>ponieważ tak zostało zainicjowane.

Suragch
źródło
Jeśli chcesz zainicjować tablicę pustego słownika, zrobiłbyś to w następujący sposób: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro
19

Użyj tego będzie działać.

var emptyDict = [String: String]()
Lim Thye Chean
źródło
Wolę tą. Ponieważ możemy zadeklarować pustą tablicę przez var emtpyAry = [String](). To ma sens.
hbin
16

Możesz to po prostu zadeklarować w ten sposób:

var emptyDict:NSMutableDictionary = [:]
Jio
źródło
6

Musisz nadać słownikowi typ

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

Jeśli kompilator może wywnioskować typ, możesz użyć krótszej składni

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type Int, String
Nevan King
źródło
5

Szybki:

var myDictionary = Dictionary<String, AnyObject>()
Juan Boero
źródło
4

Ja też się tym bawię. Wydaje się dziwne, że możesz po prostu zadeklarować pusty słownik, a następnie dodać do niego parę klucz / wartość w następujący sposób:

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

Możesz jednak utworzyć słownik, który akceptuje różne typy wartości, używając typu „Dowolny” w następujący sposób:

var emptyDictionary = Dictionary<String, Any>()
emptyDictionary["brian"] = 4.5
emptyDictionary["mike"] = "hello"
Lee Probert
źródło
4

Musisz wyraźnie określić typ danych lub typ można wywnioskować, gdy deklarujesz cokolwiek w Swift.

Szybki 3

Poniższy przykład deklaruje słownik z kluczem jako Inttypem i wartością jako Stringtypem.

Metoda 1: inicjator

let dic = Dictionary<Int, String>()

Metoda 2: Skrótowa składnia

let dic = [Int:String]()

Metoda 3: Literał słownikowy

var dic = [1: "Sample"]
// dic has NOT to be a constant
dic.removeAll()
Lorem Ipsum Dolor
źródło
4

Szybki 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
źródło
3

Jeśli chcesz utworzyć słownik ogólny z dowolnym typem

var dictionaryData = [AnyHashable:Any]()
reetu
źródło
Dzięki, w końcu, ponieważ jest to potrzebne, aby później dodać typ słownika, a nie tylko ciąg
Mitchell Currie
3

Zwykle używam

var dictionary:[String:String] = [:]
dictionary.removeAll()
Lind el Loren
źródło
3

Deklarowanie i inicjowanie słowników w języku Swift

Słownik strun

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

LUB

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

Słownik Int

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

LUB

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

Słownik AnyObject

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

LUB

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

Słownik tablicy ciągów

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

LUB

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

Array of Dictionaries of String

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

LUB

var stringDict: Array<Dictionary<String, String>> = Array<Dictionary<String, String>>()
Syed Qamar Abbas
źródło
0

Możesz zadeklarować to jako zero, wykonując następujące czynności:

var assoc : [String:String]

Więc fajną rzeczą jest to, że już złożyłeś (zwróć uwagę, że użyłem var i nie pozwól, myśl o tym jako o zmiennym i niezmiennym). Następnie możesz wypełnić go później:

assoc = ["key1" : "things", "key2" : "stuff"]
Newshorts
źródło
0

Możesz użyć następującego kodu:

var d1 = Dictionary<Int, Int>()
var d2 = [Int: Int]()
var d3: Dictionary<Int, Int> = [Int : Int]()
var d4: [Int : Int] = [:]
lewan
źródło
-1

var dictList = String: Łańcuch do słownika w swift var arrSectionTitle = Łańcuch do tablicy w swift

Gaurav
źródło
-2

Jest to bardzo przydatne w znalezieniu drogi

var dict: Dictionary = [:]

Uttam Kumar
źródło
Musisz także użyć klucza i typów wartości.
Suragch
-2
var parking = [Dictionary < String, Double >()]

^ to dodaje słownik dla wejścia [string: double]

dzika karta
źródło