使用multidimentional字典Swift填充空数组

时间:2017-02-26 21:38:38

标签: arrays swift dictionary swift3

我正在尝试用部分品牌名称填写表格视图。

现在我有这本词典

var manNames = ["A":["ABERCROMBIE & FITCH MEN","ACQUA DI PARMA MEN","ADAM LEVINE ΜΕΝ","AIGNER MEN","ANTONIO BANDERAS MEN","ARAMIS MEN","ARMANI GIORGIO MEN","AZZARO MEN"],"B":["BALDESSARINI MEN","BALDININI MEN","BENTLEY MEN","BOTTEGA VENETA MEN","BOUCHERON MEN","BREIL MILANO MEN","BRUT MEN","BURBERRY MEN","BVLGARI MEN"]]

在此结构中符合哪些

struct Objects {
    var sectionName : String!
    var sectionObjects : [String]!
}

拥有这个空的对象词典

var objectArray = [Objects]()

I fill it in with the following for loop

                let sortedNames = atoz.manNames.sorted(by: { $0.0 < $1.0 })
                for (key, value) in sortedNames {
                        objectArray.append(Objects(sectionName: key, sectionObjects: value))
                }

然后我填充表中的数据,直到现在都是好的。

在cellForRow中这就是我对每个品牌名称的看法

cell.companyName.text = objectArray[indexPath.section].sectionObjects[indexPath.row]

我想要实现的是让每个品牌名称都有自己的ID,所以当执行函数didSelectRowAt时,我想将此id发送到下一个视图控制器,而不是品牌名称。

更确切地说。

AMBERCOMBIE has the ID 40
ACQUA DI PARMA has the ID 200

如何为每个品牌名称编辑现有字典以拥有自己的ID,然后从数组objectArray中取出它?

1 个答案:

答案 0 :(得分:2)

好的,在这样的任何问题中要做的第一件事就是定义你的模型。

在这种情况下,你的模型是Manufacturer(我猜你代码中的“man”)...另外,不要缩写变量名,这使得它们难以阅读。如果某个东西是“制造商”,则将其称为“制造商”。

所以,它需要一个名字和一个id ......

struct Manufacturer {
    let name: String
    let id: Int
}

接下来,你需要一个以初始字母存储的目录,作为将它们编入章节的方式......

struct DirectorySection {
    let initialLetter: String
    let manufacturers: [Manufacturer]
}

和...

(再次注意描述性命名)

现在你需要一组这些来处理......

let directory: [DirectorySection] = [
    DirectorySection(initialLetter: "A", manufacturers: [
            Manufacturer(name: "Abercrombie & Fitch", id: 40),
            Manufacturer(name: "ACQUA DI PARMA MEN", id: 50),
            Manufacturer(name: "ADAM LEVINE ΜΕΝ", id: 60),
            ....
        ]),
    DirectorySection(initialLetter: "B", manufacturers: [
            Manufacturer(name: "BALDESSARINI MEN", id: 130),
            Manufacturer(name: "BALDININI MEN", id: 131),
            Manufacturer(name: "BENTLEY MEN", id: 132),
            ....
        ]),
    ....
]

当然,你可以在一个plist文件中定义它,如果你想要的话,或者在一个字典或一个CoreData存储中等等......如果它没有改变,那么代码就好了。只要确保以这种方式创建模型,无论您想要存储它。

现在你已经拥有了所需的一切。

从indexPath获取制造商......

let manufacturer = directory[indexPath.section].manufacturers[indexPath.row]

填充单元格......

cell.textLabel.text = manufacturer.name

将制造商传递给其他控制器...

controller.manufacturer = manufacturer

每当你处理一个Manufacturer时,你正在传递一个完整的Manufacturer。你需要这个名字吗?在那。你需要身份证吗?就在那里。

一旦你有一个不错的数据模型,剩下的就很简单了。

注意

最重要的是要从中脱颖而出。请勿使用objectArrayatozmanNamesObjects等名称。这只是让事情难以理解。使用冗长的描述性名称并没有什么不好。关于他们有很多好处。