Swift: mendeklarasikan kamus kosong


178

Saya mulai belajar swiftdengan mengikuti iBook- The Swift Programming Languageon Swift yang disediakan oleh Apple. Buku itu mengatakan untuk membuat kamus kosong yang harus digunakan [:]sama dengan saat mendeklarasikan array sebagai []:

Saya mendeklarasikan array kosong sebagai berikut:

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

Tetapi saat mendeklarasikan kamus kosong, saya mendapatkan kesalahan sintaksis:

let emptyDict = [:]

Bagaimana cara mendeklarasikan kamus kosong?


2
aneh, saya tidak salah melakukan hal ini, saya bahkan dapat meminta hitungan dan taman bermain memberi saya 0.
Kaan Dedeoglu

Tambang saya tidak memberikan kesalahan kompiler bahkan dari runtime saya bisa mendapatkan println dari konstanta & mereka hanya mencetak ini di array :() dictionary :{}statement print console let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
nsuinteger


Jawaban:


310
var emptyDictionary = [String: String]()

­

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

Catatan : jika Anda akan mengubah isi kamus dari waktu ke waktu maka nyatakan sebagai var(variabel). Anda dapat mendeklarasikan kamus kosong sebagai let(konstan) tetapi tidak ada gunanya jika Anda memiliki niat untuk mengubah isinya dari waktu ke waktu, karena konstanta tidak dapat diubah setelah telah diinisialisasi.


Jawaban lama :

Membuat kamus jenis yang kosong <String, String>akan terlihat sebagai berikut:

var emptyDictionary = Dictionary<String, String>()

Terima kasih sobat, ini berhasil. Tetapi mengapa saya tidak dapat mendeklarasikan kamus sebagai konstanta jika saya dapat mendeklarasikan array sebagai konstanta?
z22

2
Tentunya Anda tidak bisa mendeklarasikan kamus const dan membuatnya kosong? APAKAH Anda tidak akan pernah bisa menambahkan nilai ke dalamnya?
CW0007007

1
Anda dapat mendeklarasikan array kosong sebagai konstanta tetapi tidak ada gunanya. Jika Anda membaca dokumen, Anda dapat melihat bahwa array selalu dinyatakan varseperti yang saya sarankan kepada Anda: developer.apple.com/library/prerelease/ios/documentation/Swift/…
damirstuhec

1
@ Damir179 baris pertama salah. Tidak ada jenis informasi di sana sehingga Anda harus eksplisit, jika tidak, Anda akan menghasilkan contoh yang tidak dapat digunakan __NSDictionaryI. Coba tambahkan elemen ke sana emptyDictdan itu akan gagal pada waktu kompilasi.
Gabriele Petronella

1
var emptyDict: NSMutableDictionary = [:]
Jio

39

Anda tidak dapat menggunakan [:]kecuali informasi jenis tersedia.

Anda harus memberikannya secara eksplisit dalam hal ini:

var dict = Dictionary<String, String>()

varberarti itu bisa berubah, sehingga Anda dapat menambahkan entri ke dalamnya. Sebaliknya, jika Anda membuatnya letmaka Anda tidak dapat memodifikasinya lebih lanjut ( letartinya konstan).

Anda dapat menggunakan [:]notasi steno jika informasi jenis dapat disimpulkan, misalnya

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

// stuff

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

Dalam contoh terakhir kamus diketahui memiliki tipe Dictionary<String, String>oleh baris pertama. Perhatikan bahwa Anda tidak harus menentukannya secara eksplisit, tetapi telah disimpulkan.


Dari sekian banyak pilihan yang tersedia di Swift, sintaks favorit saya untuk String / String dict sederhana adalah:var dict: [String: String] = [:]
Dawngerpony

Terima kasih!. Kamus <String, String> () memperbaiki masalah saya, sebenarnya saya sudah kamus dari Enum ke MyClass. Apa yang Anda maksud dengan "ketikkan informasi tersedia"?
Eduardo Reis

32

The dokumentasi Swift merekomendasikan cara berikut untuk menginisialisasi Kamus kosong:

var emptyDict = [String: String]()

Saya agak bingung ketika pertama kali menemukan pertanyaan ini karena jawaban yang berbeda menunjukkan cara yang berbeda untuk menginisialisasi Kamus yang kosong. Ternyata sebenarnya ada banyak cara yang bisa Anda lakukan, meskipun ada yang sedikit berlebihan atau terlalu banyak diberi kemampuan Swift untuk menyimpulkan jenisnya.

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

Setelah Anda memiliki Kamus kosong Anda dapat menambahkan pasangan nilai kunci seperti ini:

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

Jika Anda ingin mengosongkan kamus lagi, Anda dapat melakukan hal berikut:

emptyDict = [:]

Jenisnya masih <String, String>karena itulah yang diinisialisasi.


Jika Anda ingin menginisialisasi array dari kamus kosong, Anda akan melakukannya sebagai berikut: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro

19

Gunakan ini akan berhasil.

var emptyDict = [String: String]()

Saya lebih suka yang ini. Karena kita dapat mendeklarasikan array kosong oleh var emtpyAry = [String](). Masuk akal.
hbin

16

Anda bisa mendeklarasikannya seperti ini:

var emptyDict:NSMutableDictionary = [:]

6

Anda harus memberikan kamus jenis

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

Jika kompiler dapat menyimpulkan tipe, Anda dapat menggunakan sintaks yang lebih pendek

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


4

Saya bermain dengan ini juga. Tampaknya aneh bahwa Anda hanya dapat mendeklarasikan kamus kosong dan kemudian menambahkan pasangan kunci / nilai seperti itu:

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

Tetapi Anda dapat membuat Kamus yang menerima jenis nilai berbeda dengan menggunakan jenis "Apa saja" seperti:

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

4

Anda perlu secara eksplisit memberi tahu tipe data atau tipe yang dapat disimpulkan ketika Anda mendeklarasikan apa pun di Swift.

Cepat 3

Sampel di bawah ini mendeklarasikan kamus dengan kunci sebagai Inttipe dan nilainya sebagai Stringtipe.

Metode 1: Inisialisasi

let dic = Dictionary<Int, String>()

Metode 2: Sintaks Tulisan Singkatan

let dic = [Int:String]()

Metode 3: Kamus Literal

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

4

Cepat 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

Jika Anda ingin membuat kamus umum dengan jenis apa pun

var dictionaryData = [AnyHashable:Any]()

Terima kasih, akhirnya karena ini diperlukan untuk menambahkan jenis kamus nanti bukan hanya string
Mitchell Currie

3

Saya biasanya menggunakan

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

3

Mendeklarasikan & Menginisialisasi Kamus dalam Swift

Kamus String

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

ATAU

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

Kamus Int

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

ATAU

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

Kamus AnyObject

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

ATAU

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

Kamus Array String

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

ATAU

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

Array Kamus String

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

ATAU

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

0

Anda dapat mendeklarasikannya sebagai nihil dengan yang berikut:

var assoc : [String:String]

Maka hal yang menyenangkan adalah Anda sudah mengeset (perhatikan saya menggunakan var dan tidak membiarkan, anggap ini bisa berubah dan tidak berubah). Kemudian Anda bisa mengisinya nanti:

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

0

Anda dapat menggunakan kode berikut:

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 untuk kamus di swift var arrSectionTitle = String untuk array di swift


-2

Sangat berguna untuk menemukan jalan Anda

var dict: Kamus = [:]


Anda harus menggunakan tipe kunci dan nilai juga.
Suragch

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

^ ini menambahkan kamus untuk input [string: double]

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.