从Dictionary到Array再返回

时间:2017-09-15 15:14:38

标签: swift dictionary uicollectionview

所以,一点背景信息: 我使用字典存储信息,其中填充了集合视图,字典中的信息与来自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]
}

但是这让我知道了:表情类型' [对象]'在没有更多背景的情况下是模棱两可的

对不起,长篇文章......

1 个答案:

答案 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