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



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



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



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


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



let emptyDict = [:]


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

594   16  

16 ответов:

var emptyDictionary = [String: String]()

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

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


ответ:

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

var emptyDictionary = Dictionary<String, String>()

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

вы должны предоставить ему явно в этом случае:

var dict = Dictionary<String, String>()

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

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

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

// stuff

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

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

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

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

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

var emptyDict = [String: String]()

вы можете просто объявить его так:

var emptyDict:NSMutableDictionary = [:]

вы должны дать словарь типа

// 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

Swift:

var myDictionary = Dictionary<String, AnyObject>()

Я тоже играю с этим. Кажется странным, что вы можете просто объявить пустой словарь, а затем добавить к нему пару ключ / значение следующим образом:

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"

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

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

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

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

var dictionaryData = [AnyHashable:Any]()

Я обычно через

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

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

var assoc : [String:String]

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

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

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

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

var dict: Dictionary = [:]

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

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

Comments

    Ничего не найдено.