Swift:数组中的字典

时间:2014-11-04 12:18:39

标签: swift swift-array swift-dictionary

数据:

[
    { firstName: "Foo", lastName: "Bar" },
    { firstName: "John", lastName: "Doe" }
]

如何使用swift数组和字典来构建这种结构?这个数据显示了数组中的字典,对吧?所以我建议:

var persons:Array = [Dictionary<String, String>()]

但这给了我错误:

Cannot convert the expressions type () to type Array<T>

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

正确的方法是:

var persons = [Dictionary<String, String>]()

相当于:

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

你的代码所做的是创建一个用Dictionary<String, String>实例填充的数组,而我假设你想要一个包含Dictionary<String, String>类型元素的数组的空实例。

答案 1 :(得分:2)

你有哪个版本的Xcode? 您的代码应该可以正常工作,但行:

var persons:Array = [Dictionary<String, String>()]

使用第一个空字典创建数组,请尝试以下方法:

var persons:Array = [Dictionary<String, String>]()

var dic1 = ["Name" : "Jon"]
var dic2 = ["Surname" : "Smith"]

persons.append(dic1)
persons.append(dic2)

println(persons)

答案 2 :(得分:1)

你确定你真的想要一个数组中的字典吗?您提供的代码表示更多带有命名列的数组,可以使用以下内容实现:

struct Name {
    var firstName : String
    var lastName : String
}

var persons1 : Array<Name> =  [
    Name(firstName: "Foo", lastName: "Bar"),
    Name(firstName: "John", lastName: "Doe")
]
persons1[0].firstName       // "Foo"

var persons2 : Array<(firstName: String, lastName:String)> = [
    (firstName: "Mary", lastName: "Mean"),
    (firstName: "Foo", lastName: "Bar"),
    (firstName: "John", lastName: "Doe")
]

 persons2[1].firstName     // "Bar"

这些是正确的数组,并使用下标来解决。字典类型通常是键和值的组合,即昵称作为键,名称作为值。

var nickNames : [String:String] =  [
    "mame" : "Mary Mean",
    "foba" : "Foo Bar",
    "jodo" : "John Doe"]

nickNames["mame"]!  // "Mary Mean"

在这里我们查找键值,并获得一个可选的值作为回报,我强行打开...

所有这些都可以相当容易地添加,但请注意,命名的元组变体persons2不遵循建议的做法。另请注意,字典数组允许包含在我上次注入时建议的不同键上。

persons1.append( Name(firstName: "Some", lastName: "Guy") )
persons2.append( firstName: "Another", lastName: "Girl" )

nickNames["anna"] = "Ann Nabel"

// Array of Dictionaries
var persons : [[String:String]] = [
    [ "firstName" : "Firstly", "lastName" : "Lastly"],
    [ "firstName" : "Donald", "lastName" : "Duck"]
]

persons.append( ["firstName" : "Georg", "middleName" : "Friedrich", "lastName" : "Händel"] )

答案 3 :(得分:0)

这样的事情对你有用:

var persons: Array<Dictionary<String, String>> = Array()

现在您可以添加名称:

persons.append(["firstName": "Foo", "lastName": "Bar"]);
persons.append(["firstName": "John", "lastName": "Doo"]);

注意:如果您不安全如何使用文字,请不要使用它们