2014-11-04 117 views
0

数据:斯威夫特:字典里面阵列

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

怎样才可以有使用快捷数组和字典这样的结构?这些数据显示数组中的字典,对吗?因此,我建议:

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

但是这给我的错误:

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

任何想法?

+0

问题:该错误是针对您的问题中未包含的另一行代码,不是吗? – Antonio 2014-11-04 12:27:25

回答

3

正确的方法是:

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

这相当于:

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

你的代码就不是是创建的Dictionary<String, String>实例填充一个数组,而我相信你想要一个包含Dictionary<String, String>类型元素的数组的空实例。

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) 
0

像这样可以为你工作:

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

,现在您可以添加名称:

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

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

0

你确定你真的想要一个数组中的字典吗?你给的代码表示更多的名为列阵列,可以使用类似以下内容来实现:

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"])