1

数据:

[
    { 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

4 回答 4

5

正确的方法是:

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

这相当于:

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

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

于 2014-11-04T12:24:02.893 回答
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)
于 2014-11-04T12:24:23.840 回答
2

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

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"] )
于 2015-03-07T10:46:27.907 回答
0

像这样的东西可以为你工作:

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

现在您可以添加名称:

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

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

于 2014-11-04T12:27:26.310 回答