Swift: Boş bir sözlük beyan et


178

Apple tarafından sağlanan swiftiBook- The Swift Programming Languageon Swift'i takip ederek öğrenmeye başlıyorum . Kitap, boş bir sözlük oluşturmak için bir [:]diziyi şu şekilde bildirirken kullanması gerektiğini söylüyor []:

Boş bir dizi aşağıdaki gibi ilan ettim:

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

Ancak boş sözlük bildirirken sözdizimi hatası alıyorum:

let emptyDict = [:]

Boş bir sözlüğü nasıl beyan ederim?


2
tuhaf, bunu yaparken hiçbir hata almıyorum, sayımı bile isteyebilirim ve oyun alanı bana 0 veriyor.
Kaan Dedeoğlu

benim bile herhangi bir derleyici hata vermez çalışmadan sabitlerin bir println alabilirsiniz ve onlar sadece bu konsolda array :() dictionary :{}yazdırma bildirimleri yazdırmak let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
nsuinteger


Yanıtlar:


310
var emptyDictionary = [String: String]()

­

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

Not : Eğer sözlüğün içeriğini zaman içinde değiştirecekseniz, bunu var(değişken) olarak bildirin . Sen edebilirsiniz bir şekilde boş bir sözlük beyan let(sabit), ancak zamanla içeriğini değiştirme niyeti varsa başlatıldıktan sonra sabit değiştirilemez çünkü, anlamsızdır.


Eski cevap :

Boş bir tür sözlük oluşturmak <String, String>aşağıdaki gibi görünecektir:

var emptyDictionary = Dictionary<String, String>()

Teşekkürler dostum, bu işe yarıyor. Ama bir diziyi sabit olarak bildirebilirsem neden sözlüğü sabit olarak bildiremiyorum?
z22

2
Elbette bir const sözlüğü ilan edip boş bırakamazdınız mı? ASLA buna değer katamazdınız mı?
CW0007007

1
Boş diziyi sabit olarak bildirebilirsiniz, ancak anlamsızdır. Dokümanları okursanız, bir dizinin her zaman varsize önerdiğim gibi bildirildiğini görebilirsiniz: developer.apple.com/library/prerelease/ios/documentation/Swift/…
damirstuhec

1
@ Damir179 ilk satır çok yanlış. Orada hiçbir tür bilgi yoktur, bu yüzden açık olmak zorunda, aksi takdirde kullanılamaz bir örneğini üreteceksiniz __NSDictionaryI. Buna bir öğe eklemeyi deneyin emptyDict, derleme sırasında başarısız olur.
Gabriele Petronella

1
var emptyDict: NSMutableDictionary = [:]
Jio

39

[:]Tür bilgisi olmadığı sürece kullanamazsınız .

Bu durumda açıkça belirtmeniz gerekir:

var dict = Dictionary<String, String>()

vardeğiştirilebilir olduğu anlamına gelir, böylece giriş ekleyebilirsiniz. Tersine, eğer bunu letyaparsanız, daha fazla değiştiremezsiniz ( letsabit anlamına gelir).

[:]Örneğin, tür bilgisi çıkarılabiliyorsa steno gösterimini kullanabilirsiniz.

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

// stuff

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

Son örnekte, sözlüğün Dictionary<String, String>ilk satıra göre bir türü olduğu bilinmektedir . Açıkça belirtmeniz gerekmediğini, ancak çıkartıldığını unutmayın.


Swift'te bulunan birçok seçenek arasından, basit bir String / String dict için en sevdiğim sözdizimi:var dict: [String: String] = [:]
Dawngerpony

Teşekkür ederim!. Sözlük <String, String> () sorunumu düzeltti, aslında Enum'dan MyClass'a bir sözlük vardı. "Tip bilgisi var" ile ne demek istiyorsun?
Eduardo Reis

32

Swift dokümantasyon boş Sözlük başlatmak için aşağıdaki yolu tavsiye eder:

var emptyDict = [String: String]()

Bu soruya ilk geldiğimde biraz kafam karıştı, çünkü farklı cevaplar boş bir Sözlüğü başlatmak için farklı yollar gösterdi. Aslında, bunu yapabilmenin birçok yolu olduğu ortaya çıkıyor, ancak Swift'in türü çıkartabilme yeteneği göz önüne alındığında, bazıları biraz gereksiz veya aşırı ayrıntılı.

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

Boş bir sözlüğe sahip olduktan sonra aşağıdaki gibi bir anahtar / değer çifti ekleyebilirsiniz:

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

Sözlüğünüzü tekrar boşaltmak istiyorsanız, aşağıdakileri yapabilirsiniz:

emptyDict = [:]

Türleri hala <String, String>çünkü bu şekilde başlatıldı.


Boş bir sözlük dizisini başlatmak istiyorsanız, bunu şu şekilde yapmalısınız: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro

19

Kullanın işe yarayacak.

var emptyDict = [String: String]()

Bunu tercih ederim. Çünkü tarafından boş bir dizi bildirebiliriz var emtpyAry = [String](). Bu mantıklı.
hbin

16

Basitçe şöyle beyan edebilirsiniz:

var emptyDict:NSMutableDictionary = [:]

6

Sözlüğe bir tür vermek zorundasınız

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

Derleyici türü çıkarabilirse, daha kısa sözdizimini kullanabilirsiniz

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


4

Ben de bununla oynuyorum. Boş bir sözlük bildirmeniz ve daha sonra buna bir anahtar / değer çifti eklemeniz garip görünüyor:

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

Ancak, "Herhangi" türünü kullanarak farklı değer türlerini kabul eden bir Sözlük oluşturabilirsiniz:

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

4

Swift'te herhangi bir şey bildirdiğinizde veri türünü veya türün çıkartılabileceğini açıkça belirtmeniz gerekir.

Hızlı 3

Aşağıdaki örnek, anahtar Inttürü ve değeri tür olarak içeren bir sözlük bildirir String.

Yöntem 1: Başlatıcı

let dic = Dictionary<Int, String>()

Yöntem 2: Steno Sözdizimi

let dic = [Int:String]()

Yöntem 3: Sözlük Değişmezi

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

4

Hızlı 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

Herhangi bir türde genel bir sözlük oluşturmak istiyorsanız

var dictionaryData = [AnyHashable:Any]()

Teşekkürler, nihayet bu daha sonra sadece dize değil bir sözlük türü eklemek için gerekli olduğu için
Mitchell Currie

3

Genellikle kullanıyorum

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

3

Swift'te Sözlükleri Bildirme ve Başlatma

Dize Sözlüğü

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

VEYA

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

Int sözlüğü

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

VEYA

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

AnyObject Sözlüğü

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

VEYA

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

Array of String Sözlüğü

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

VEYA

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

Dizi Sözlükleri Dizisi

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

VEYA

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

0

Aşağıdakileri nil olarak bildirebilirsiniz:

var assoc : [String:String]

O zaman güzel bir şey zaten dizgindir (var kullandığımı ve izin vermeyin, bunları değişebilir ve değişmez olarak düşünün). Sonra daha sonra doldurabilirsiniz:

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

0

Aşağıdaki kodu kullanabilirsiniz:

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

-1

var dictList = Dize: Hızlı bir şekilde sözlük için dize var arrSectionTitle = Hızlı bir şekilde dizi için dize


-2

Yolunuzu bulmak için çok kullanışlıdır

var dict: Sözlük = [:]


Anahtar ve değer türlerini de kullanmalısınız.
Suragch

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

^ Bu, [string: double] girişi için bir sözlük ekler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.