在 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 ...>]

然而,我不能算出语法来初始化一个空的字典数组。

我知道您可以拥有一个 Dictionary 数组,因为使用初始值进行初始化是可行的:

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'

因此,问题是什么是正确的方法来初始化一个空的 Dictionary Items 数组,为什么这种语法 var myNewDictArray: Dictionary[] = []不起作用?

107976 次浏览

你需要给字典赋予类型:

var myNewDictArray: [Dictionary<String, Int>] = []

或者

var myNewDictArray = [Dictionary<String, Int>]()

编辑 : 也可以使用较短的语法:

var myNewDictArray: [[String:Int]] = []

或者

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

这个方法不起作用的原因是:

var myNewDictArray: Dictionary[] = []

在定义 dictionary 时,需要为它的键和值提供类型。这些行中的每一行都会为您创建一个空的字典数组,其中包含字符串键和字符串值:

var dictArray1: Dictionary<String, String>[] = Dictionary<String, String>[]()
var dictArray2: Dictionary<String, String>[] = []
var dictArray3 = Dictionary<String, String>[]()

这将创建一个空的、不可变的字典:

let dictionary = [ : ]

如果你想要一个易变的:

var dictionary = [ : ]

这两个字典都默认为 Dictionary<String?, AnyObject?>

不能再使用元素连接。

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

如果你想使用迅捷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)