Инициализация пустого массива словари в Swift
Я пытаюсь обернуть голову вокруг инициализации пустых массивов в Swift.
для массива строк это довольно прямо вперед:
var myStringArray: String[] = []
myStringArray += "a"
myStringArray += "b"
-> ["a", "b"]
и для целых чисел
var myIntArray: Int[] = []
myIntArray += 1
myIntArray += 2
-> [1, 2]
он также работает для других типов объектов, таких как NSImage объекты :
let path = "/Library/Application Support/Apple/iChat Icons/Flags/"
let image1 = NSImage(byReferencingFile: path + "Brazil.png")
let image2 = NSImage(byReferencingFile: path + "Chile.png")
var myImageArray: NSImage[] = []
myImageArray += image1
myImageArray += image2
-> [<NSImage 0x7fe371c199f0 ...>, <NSImage 0x7fe371f39ea0 ...>]
однако я не могу разработать синтаксис для инициализации пустого массива словарей.
Я знаю, что вы можете иметь массив словарей, потому что инициализация с начальное значение работает:
let myDict1 = ["someKey":"someValue"]
let myDict2 = ["anotherKey":"anotherValue"]
var myDictArray = [myDict1]
myDictArray += myDict2
-> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]
однако это (что вы ожидаете синтаксис) не удается:
var myNewDictArray: Dictionary[] = []
ошибка Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'
Итак, вопрос в том, как правильно инициализировать пустой массив словарных элементов и почему этот синтаксис var myNewDictArray: Dictionary[] = [] работы?
6 ответов:
вы должны дать типы словарей:
var myNewDictArray: [Dictionary<String, Int>] = []или
var myNewDictArray = [Dictionary<String, Int>]()Edit: вы также можете использовать сокращенный синтаксис:
var myNewDictArray: [[String:Int]] = []или
var myNewDictArray = [[String:Int]]()
Это создаст пустой, неизменяемый словарь:
let dictionary = [ : ]и если вы хотите изменчивый:
var dictionary = [ : ]оба этих словаря по умолчанию
Dictionary<String?, AnyObject?>.
причина этого не работает:
var myNewDictArray: Dictionary[] = []это то, что вам нужно предоставить типы для ключей и значений словаря при его определении. Каждая из этих строк создаст вам пустой массив словарей со строковыми ключами и строковыми значениями:
var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]() var dictArray2: Dictionary<String, String>[] = [] var dictArray3 = Dictionary<String, String>[]()
вы больше не можете использовать конкатенацию элементов.
class Image {} Image i1 Image i2 var x = [Image]() x += i1 // will not work (adding an element is ambiguous) x += [i1] // this will work (concatenate an array to an array with the same elements) x += [i1, i2] // also good
вы можете использовать это, если вы хотите использовать swift 2.3!
let path = "/Library/Application Support/Apple/iChat Icons/Flags/" let image1 = UIImage(contentsOfFile: readPath + "Brazil.png") let image2 = UIImage(contentsOfFile: readPath + "Chile.png") var myImageArray = [UIImage]() myImageArray.append(image1) myImageArray.append(image2)
Comments