Swift: объявить пустой словарь

148

Я начинаю изучать swift, следуя iBook- The Swift Programming Language на Swift, предоставляемом Apple. В книге говорится, что для создания пустого словаря следует использовать [:] так же, как при объявлении массива как []:

Я объявил пустой массив следующим образом:

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

Но при объявлении пустого словаря я получаю синтаксическую ошибку:

let emptyDict = [:]

Как объявить пустой словарь?

  • 2
    странно, я не получаю ошибки, делая это, я даже могу попросить счет, и игровая площадка дает мне 0.
  • 0
    Мой не дает никакой ошибки компилятора, даже во время выполнения, я могу получить println констант, и они просто печатают это в консольном array :() dictionary :{} операторы print let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
Показать ещё 2 комментария
Теги:
dictionary

19 ответов

249
Лучший ответ
var emptyDictionary = [String: String]()

& застенчивы;

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

Примечание: если вы собираетесь менять содержимое словаря со временем, объявите его как var (variable). Вы можете объявить пустой словарь как let (константу), но это бессмысленно, если вы намерены изменить его содержимое с течением времени, поскольку константа не может быть изменена после ее инициализации.


Старый ответ:

Создание пустого словаря типа <String, String> будет выглядеть следующим образом:

var emptyDictionary = Dictionary<String, String>()
  • 0
    Спасибо друг, это работает. Но почему я не могу объявить словарь как константу, если я могу объявить массив как константу?
  • 2
    Конечно, вы не можете объявить постоянный словарь и сделать его пустым? КАК вы никогда не сможете добавить к этому ценности?
Показать ещё 6 комментариев
37

Вы не можете использовать [:], если информация о типе недоступна.

Вам нужно явно указать это в этом случае:

var dict = Dictionary<String, String>()

var означает, что он изменен, поэтому вы можете добавить к нему записи. И наоборот, если вы сделаете его let, то вы не сможете его изменить (let означает константу).

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

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

// stuff

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

В последнем примере словарь, как известно, имеет тип Dictionary<String, String> по первой строке. Обратите внимание, что вам не нужно было указывать его явно, но это было сделано.

  • 0
    Из многих параметров, доступных в Swift, мой любимый синтаксис для простого String / String dict: var dict: [String: String] = [:]
  • 0
    Спасибо!. Словарь <String, String> () исправил мою проблему, у меня фактически был словарь от Enum до MyClass. Что вы подразумеваете под "информация о типе доступна"?
23

Документация Swift рекомендует следующий способ инициализации пустого словаря:

var emptyDict = [String: String]()

Я немного смутился, когда впервые встретил этот вопрос, потому что разные ответы показали разные способы инициализации пустого Словаря. Оказывается, на самом деле есть много способов сделать это, хотя некоторые из них немного избыточны или слишком многословны, учитывая способность Swift вывести тип.

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>, потому что так оно и было инициализировано.

  • 0
    Если вы хотите инициализировать массив пустого словаря, вы должны сделать это следующим образом: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
19

Использовать это будет.

var emptyDict = [String: String]()
  • 0
    Я предпочитаю этот. Потому что мы можем объявить пустой массив с помощью var emtpyAry = [String]() . Это имеет смысл.
15

Вы можете просто объявить это следующим образом:

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
5

Swift:

var myDictionary = Dictionary<String, AnyObject>()
  • 1
    Это работало для меня, используя Swift 2.1, спасибо!
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()
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"
  • 0
    «Любая» вещь сделала это отлично. Благодарю.
3

Вам нужно явно указать тип данных, или тип может быть выведен, когда вы объявляете что-либо в Swift.

Swift 3

В приведенном ниже примере объявляется словарь с ключом как тип Int и значение как тип String.

Способ 1: Инициализатор

let dic = Dictionary<Int, String>()

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

let dic = [Int:String]()

Способ 3: Словарь Literal

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

Если вы хотите создать общий словарь с любым типом

var dictionaryData = [AnyHashable:Any]()
  • 0
    Спасибо, наконец, потому что это необходимо, чтобы добавить тип словаря позже, а не просто строку
1

Я обычно использую

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

Словари

Словарь Строки

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

ИЛИ ЖЕ

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

Словарь Int

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 dictEmpty = [String:String]()
var dictEmpty2 = Dictionary <String,Int>()
var dictEmpty3: [String:String] = [String:String]()
var dictEmpty4: [String:String] = [:]
0

Вы можете использовать следующий код:

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

Вы можете объявить его как nil со следующим:

var assoc : [String:String]

Тогда хорошо, что вы уже набираете набор (обратите внимание, что я использовал var и не позволял, считал их изменчивыми и неизменяемыми). Затем вы можете заполнить его позже:

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

var dictList = String: Строка для словаря в swift  var arrSectiontitle= Строка для массива в swift

  • 1
    Синтаксис и форматирование кода неверны.
-3
var parking = [Dictionary < String, Double >()]

^ это добавляет словарь для ввода [string: double]

-3

Это очень удобно для поиска вашего пути

var dict: Словарь = [:]

  • 0
    Вы также должны использовать типы ключей и значений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню