在Swift中初始化空字典的数组
我试图围绕在Swift中初始化空数组。
对于一个string数组,它非常简单:
var myStringArray: String[] = [] myStringArray += "a" myStringArray += "b" -> ["a", "b"]
和整数
var myIntArray: Int[] = [] myIntArray += 1 myIntArray += 2 -> [1, 2]
它也适用于其他types的对象,如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"]]
编辑:在下面的代码(混合myNewDictArray和myDictArray)有一个错误,当纠正它不工作,因为我说过了。
如下所示:
let myDict1 = ["someKey":"someValue"] let myDict2 = ["anotherKey":"anotherValue"] var myNewDictArray: AnyObject = [] myDictArray += myDict1 myDictArray += myDict2 -> [["someKey": "someValue"], ["anotherKey": "anotherValue"]]
然而,这(你期望的语法)失败:
var myNewDictArray: Dictionary[] = []
与错误Cannot convert the expression's type 'Dictionary[]' to type 'Hashable'
所以问题是什么是正确的方式来初始化一个空的数组字典项目,为什么不这个语法var myNewDictArray: Dictionary[] = []
工作?
你需要给字典的types:
var myNewDictArray: [Dictionary<String, Int>] = []
要么
var myNewDictArray = [Dictionary<String, Int>]()
编辑 :您也可以使用较短的语法:
var myNewDictArray: [[String:Int]] = []
要么
var myNewDictArray = [[String:Int]]()
这将创build一个空的,不可变的字典:
let dictionary = [ : ]
如果你想要一个可变的:
var dictionary = [ : ]
这两个字典都默认为Dictionary<String?, AnyObject?>
。
这是不工作的原因:
var myNewDictArray: Dictionary[] = []
在定义字典时,需要为字典的键和值提供types。 这些行中的每一行都会为您创build一个空string键和string值的字典数组:
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
var yourArrayname = [String]() // String or anyOther according to need
你可以使用这个,如果你想使用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)