编程新手!
我正在尝试在Swift中的结构中创建一个字典数组,如下所示:
var dictionaryA = [
"a": "1",
"b": "2",
"c": "3",
]
var dictionaryB = [
"a": "4",
"b": "5",
"c": "6",
]
var myArray = [[ : ]]
myArray.append(dictionaryA)
myArray.append(dictionaryB)
这在游乐场中运行良好,但是当我将它放入Xcode项目中时,在struct中,带有append函数的行会产生错误“Expected declaration”。
我也尝试使用+ =运算符,结果相同。
如何在struct中成功构造这个数组?
答案 0 :(得分:10)
根据您的错误Expected declaration
,我假设您这样做:
struct Foo {
var dictionaryA = [
"a": "1",
"b": "2",
"c": "3",
]
var dictionaryB = [
"a": "4",
"b": "5",
"c": "6",
]
var myArray = [[ : ]]
myArray.append(dictionaryA) // < [!] Expected declaration
myArray.append(dictionaryB)
}
这是因为you can place only "declarations" in the struct body和myArray.append(dictionaryA)
不是声明。
您应该在其他地方执行此操作,例如在初始化程序中。以下代码编译。
struct Foo {
var dictionaryA = [
"a": "1",
"b": "2",
"c": "3",
]
var dictionaryB = [
"a": "4",
"b": "5",
"c": "6",
]
var myArray = [[ : ]]
init() {
myArray.append(dictionaryA)
myArray.append(dictionaryB)
}
}
但是正如@AirspeedVelocity所提到的那样,你应该提供更多关于myArray
的信息,或myArray
Array<NSDictionary>
我认为你不期望的信息。
无论如何,正确的解决方案会因您真正想做的事情而有所不同:
也许或许没有,你想要的是:
struct Foo {
static var dictionaryA = [
"a": "1",
"b": "2",
"c": "3",
]
static var dictionaryB = [
"a": "4",
"b": "5",
"c": "6",
]
var myArray = [dictionaryA, dictionaryB]
}
但是,我不知道,为什么不这样做:
struct Foo {
var myArray = [
[
"a": "1",
"b": "2",
"c": "3",
],
[
"a": "4",
"b": "5",
"c": "6",
]
]
}
答案 1 :(得分:6)
问题出在这一行:
var myArray = [[ : ]]
你需要告诉Swift myArray
是什么类型 - [[:]]
信息不足。
您可以采用明确的方式:
var myArray: [[String:String]] = [[ : ]]
或者,如果可行的话,隐含地使用您计划放入的第一个或两个值:
var myArray = [dictionaryA]
var myArray = [dictionaryA,dictionaryB]
(作为显式空版本的替代,您还可以编写var myArray = [[String:String]]()
,这是var myArray = Array<Dictionary<String,String>>()
的简写
答案 2 :(得分:2)
var arrayOfDict = [[String: Int]]()
// Create a dictionary and add it to the array.
var dict1: [String: Int] = ["age": 20]
arrayOfDict.append(dict1)
// Create another dictionary.
var dict2: [String: Int] = ["rank": 5].
arrayOfDict.append(dict2)
// Get value from dictionary in array element 0.
if let value = arrayOfDict[0]["age"] {
print(value)
}
输出
20
答案 3 :(得分:0)
或者您可以使用更简单的元组数组,如下所示:
var myArray:[(a:String,b:String,c:String)] = []
并追加以后需要的任何元素:
self.myArray.append((a:"A",b:"B",c:"c"))
并且只使用它们:
self.myArray[index].a
self.myArray[index].b
self.myArray[index].c