所以,一点背景信息: 我使用字典存储信息,其中填充了集合视图,字典中的信息与来自urlsession的数据配对。
我的词典看起来像这样:
var allDict = ["Section1": ["device1", "device2"], "Section2": ["device3", "device4"]]
然后我使用一个struct来获取一个数组,该数组提供我的collectionview单元格和部分:
struct Objects {
var sectionName : String!
var sectionObjects : [String]!
}
var objectArray = [Objects]()
for (key, value) in allDict {
objectArray.append(Objects(sectionName: key, sectionObjects: value))
}
结果如下:
ObjectArray: [__lldb_expr_134.Objects(sectionName: Section1, sectionObjects: ["device1", "device2"]), __lldb_expr_134.Objects(sectionName: Section2, sectionObjects: ["device3", "device4"])]
["device1", "device2"]
现在,问题在于我希望能够重新排列单元格,并且我能够重新排列数组中的数据,但是我必须将它恢复到字典中。 我知道一个dicitonary是未分类的,但是在测试时我从来没有遇到过那些设备发生变化的问题,这个问题存在于dicitonary里面的数组中。
我的想法是重新排列ObjectArray,然后清除字典并将数据重新放入。 所以我尝试使用for循环从ObjectArray获取数据但是我没弄错,这是我尝试过的:
我发现我可以访问这样的数据:
print(objectArray[0].sectionObjects)
["device1", "device2"]
所以我试过了:
for items in objectArray {
print(items)
for (name) in items.sectionObjects {
print(name)
}
}
我得到了这个:
device1
device2
但是当我这样做时:
for items in objectArray {
print(items)
for (name) in items.sectionName {
print(name)
}
}
我明白了:
S
e
c
t
i
o
n
1
我想要的只是:
for (sectionNAme, sectionObjects) in objectArray {
newDictionary[sectionName] += [sectionObjects]
}
但是这让我知道了:表情类型' [对象]'在没有更多背景的情况下是模棱两可的
对不起,长篇文章......
答案 0 :(得分:1)
你必须以这种方式编写循环
for object in objectArray {
newDictionary[object.sectionName] = object.sectionObjects
}
object
代表一个Objects
实例 - 按照建议以单数形式Object
命名结构的方式 - 您获得object.sectionName
的名称和带{的对象{1}}
注意:
object.sectionObjects
发生是因为您将名称字符串视为数组,并且您正在遍历字符串的字符。
因为你正在使用隐式成员初始化器,所以我会将带有非可选成员的结构声明为S
e
c
t
i
o
n
1
并缩短成员名称:
Section