我正在尝试用部分品牌名称填写表格视图。
现在我有这本词典
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
中取出它?
答案 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
。你需要这个名字吗?在那。你需要身份证吗?就在那里。
一旦你有一个不错的数据模型,剩下的就很简单了。
注意强>
最重要的是要从中脱颖而出。请勿使用objectArray
或atoz
或manNames
或Objects
等名称。这只是让事情难以理解。使用冗长的描述性名称并没有什么不好。关于他们有很多好处。