Arrays 用多维字典填充空数组
我正试图在表格视图的各个部分中填入一些品牌名称 现在我有这本字典Arrays 用多维字典填充空数组,arrays,swift,dictionary,swift3,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","BE
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))
}
我试图实现的是使每个品牌名称都有自己的ID,因此当执行函数didSelectRowAt
时,我希望将此ID发送到下一个视图控制器,而不是品牌名称
更准确地说
AMBERCOMBIE has the ID 40
ACQUA DI PARMA has the ID 200
等等
如何编辑每个品牌名称的现有词典,使其具有自己的ID,然后从数组中获取它?objectArray?好的,在此类问题中要做的第一件事是定义您的模型 在这种情况下,您的型号是
制造商(我是从代码中的“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存储中定义,等等。。。如果代码不变的话,现在编写代码也一样好。只要确保以这种方式创建模型,无论您希望以何种方式存储它
现在你已经准备好了你需要的一切
要从制造商处获取制造商,请执行以下操作
let manufacturer = directory[indexPath.section].manufacturers[indexPath.row]
要填充单元格
cell.textLabel.text = manufacturer.name
要将制造商传递给其他控制器
controller.manufacturer = manufacturer
无论何时与制造商
打交道,您都在传递一个完整的制造商
。你需要名字吗?就在那里。你需要身份证吗?就在那里
一旦你有了一个像样的数据模型,剩下的就很简单了
注意
最主要的是要从中吸取教训。不要使用像objectArray
或atoz
或manNames
或Objects
这样的名称。这只会让事情变得难以理解。使用长的描述性名称并没有什么不好的。它们有很多优点。好的,在这样的问题中,首先要做的是定义模型
在这种情况下,您的型号是制造商(我是从代码中的“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存储中定义,等等。。。如果代码不变的话,现在编写代码也一样好。只要确保以这种方式创建模型,无论您希望以何种方式存储它
现在你已经准备好了你需要的一切
要从制造商处获取制造商,请执行以下操作
let manufacturer = directory[indexPath.section].manufacturers[indexPath.row]
要填充单元格
cell.textLabel.text = manufacturer.name
要将制造商传递给其他控制器
controller.manufacturer = manufacturer
无论何时与制造商
打交道,您都在传递一个完整的制造商
。你需要名字吗?就在那里。你需要身份证吗?就在那里
一旦你有了一个像样的数据模型,剩下的就很简单了
注意
最主要的是要从中吸取教训。不要使用像objectArray
或atoz
或manNames
或Objects
这样的名称。这只会让事情变得难以理解。使用长的描述性名称并没有什么不好的。它们有很多优点。你的“数组”不是数组。这是一本[String:[String]]
字典。@Fogmeister你说得对,我现在就编辑。我的错。还有,为什么不把名字传过来?当另一个视图控制器接收到唯一id时,您将如何处理它?@Fogmeister在我的API上发出请求。这些字典将是动态的,这就是为什么我要发送ID而不是名称。在这种情况下,我根本不会将它存储在这样的字典中。存储一个对象数组(不是字符串),并为每个对象指定一个名称和id。您的“数组”不是数组。这是一本[String:[String]]
字典。@Fogmeister你说得对,我现在就编辑。我的错。还有,为什么不把名字传过来?当另一个视图控制器接收到唯一id时,您将如何处理它?@Fogmeister在我的API上发出请求。这些字典将是动态的,这就是为什么我要发送ID而不是名称。在这种情况下,我根本不会将它存储在这样的字典中。存储一个对象数组(不是字符串),给每个对象一个名称和id。非常感谢。当我阅读你的答案时,我也编写了这个代码,但我对数组感到困惑。现在我明白了!再次感谢您收听备注
部分,非常感谢。当我阅读你的答案时,我也编写了这个代码,但我对数组感到困惑。现在我明白了!再次感谢您收听备注
部分