Swift: оголосити порожній словник


178

Я починаю вчитися swift, дотримуючись iBook- The Swift Programming Languageon Swift, наданий Apple. У книзі сказано, що для створення порожнього словника слід використовувати те [:]саме, що і при оголошенні масиву як []:

Я оголосив порожній масив наступним чином:

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

Але при оголошенні порожнього словника я отримую синтаксичну помилку:

let emptyDict = [:]

Як оголосити порожній словник?


2
дивно, я не отримую помилок, роблячи це, я навіть можу попросити рахувати, і майданчик дає мені 0.
Каан Дедеоглу

мій не дає жодної помилки компілятора, навіть під час виконання я можу отримати println констант, і вони просто надрукують це у array :() dictionary :{}let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
конспектах


Відповіді:


310
var emptyDictionary = [String: String]()

­

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

Примітка : якщо ви збираєтеся змінювати вміст словника з часом, оголошуйте його як var(змінну). Ви можете оголосити порожній словник як let(постійний), але безглуздо, якщо ви маєте намір змінювати його вміст з часом, оскільки константа не може бути змінена після її ініціалізації.


Стара відповідь :

Створення порожнього словника типу <String, String>виглядатиме так:

var emptyDictionary = Dictionary<String, String>()

Спасибі товариш, це працює. Але чому я не можу оголосити словник постійним, якщо я можу оголосити масив постійним?
z22

2
Невже ви не змогли оголосити словник const і зробити його порожнім? ЯК ви ніколи не зможете додати до нього значення?
CW0007007

1
Ви можете оголосити порожній масив постійним, але це безглуздо. Якщо ви прочитаєте документи, ви побачите, що масив завжди оголошується таким, varяк я вам запропонував: developer.apple.com/library/prerelease/ios/documentation/Swift/…
damirstuhec

1
@ Damir179 перший рядок - це неправильно. Інформації про тип там немає, тому ви повинні бути явними, інакше ви створите непридатний екземпляр __NSDictionaryI. Спробуйте додати елемент до цього, emptyDictі він не вдасться під час компіляції.
Габріеле Петронелла

1
var emptyDict: NSMutableDictionary = [:]
Jio

39

Ви не можете використовувати, [:]якщо інформація про тип не доступна.

У цьому випадку вам це потрібно надати чітко:

var dict = Dictionary<String, String>()

varце означає, що він є змінним, тому ви можете додати записи до нього. І навпаки, якщо ви зробите це, letто ви більше не можете його змінювати ( letозначає постійне).

Ви можете використовувати [:]скорочення, якщо, наприклад, можна вказати інформацію про тип

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

// stuff

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

В останньому прикладі словник, як відомо, має тип Dictionary<String, String>першого рядка. Зауважте, що вам не потрібно було чітко вказувати це, але це було зроблено висновок.


З багатьох варіантів, доступних у Swift, моїм улюбленим синтаксисом для простого рядка String / String є:var dict: [String: String] = [:]
Dawngerpony

Дякую!. Словник <String, String> () виправив мою проблему, у мене фактично був словник від Enum до MyClass. Що ви маєте на увазі під "типом інформації доступною"?
Едуардо Рейс

32

Документація Swift рекомендує наступний спосіб ініціалізації порожнього словника:

var emptyDict = [String: String]()

Я трохи розгубився, коли вперше зіткнувся з цим питанням, оскільки різні відповіді показали різні способи ініціалізації порожнього словника. Виявляється, насправді існує маса способів зробити це, хоча деякі з них є надлишковими або надмірно багатослівними, враховуючи здатність Свіфта виводити тип.

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

Після того, як у вас є порожній словник, ви можете додати пару ключових значень на зразок цього:

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

Якщо ви хочете знову спорожнити словник, ви можете зробити наступне:

emptyDict = [:]

Типи все ще є <String, String>тому, що саме так було ініціалізовано.


Якщо ви хочете ініціалізувати масив порожнього словника, зробите це як такий: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Дон Алехандро

19

Використовувати це буде працювати.

var emptyDict = [String: String]()

Я віддаю перевагу цьому. Тому що ми можемо оголосити порожній масив за допомогою var emtpyAry = [String](). Це має сенс.
hbin

16

Ви можете просто оголосити це так:

var emptyDict:NSMutableDictionary = [:]

6

Ви повинні надати словнику тип

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

Якщо компілятор може зробити висновок про тип, ви можете використовувати коротший синтаксис

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


4

Я теж граю з цим. Дивно здається, що ви можете просто оголосити порожній словник, а потім додати до нього пару ключів / значень так:

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

Але ви можете створити словник, який приймає різні типи значень, використовуючи тип "Будь-який", наприклад:

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

4

Вам потрібно чітко вказати тип даних або тип можна зробити висновок, коли ви декларуєте що-небудь у Swift.

Швидкий 3

Наведений нижче приклад оголошує словник з ключем як Intтипом і значенням як Stringтипом.

Спосіб 1: Ініціалізатор

let dic = Dictionary<Int, String>()

Спосіб 2: Скорочений синтаксис

let dic = [Int:String]()

Спосіб 3: Словниковий словник

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

4

Швидкий 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

Якщо ви хочете створити загальний словник будь-якого типу

var dictionaryData = [AnyHashable:Any]()

Дякую, нарешті, тому що це потрібно, щоб пізніше додати тип словника не просто рядка
Мітчелл Керрі


3

Декларування та ініціалізація словників у Swift

Словник рядка

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

АБО

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

Словник міжнар

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

АБО

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

Словник AnyObject

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

АБО

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

Словник масиву рядків

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

АБО

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

Масив словників рядків

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

АБО

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

0

Ви можете оголосити його як нульове з наступним:

var assoc : [String:String]

Тоді приємно, що ти вже набрав (зауважив, що я використовував var і не дозволяю, думаю, що це як незмінні та незмінні). Потім ви можете заповнити його пізніше:

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

0

Ви можете використовувати наступний код:

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

-1

var dictList = String: Рядок для словника в swift var arrSectionTitle = Рядок для масиву в swift



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

^ до цього додається словник для введення [string: double]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.