Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 用多维字典填充空数组_Arrays_Swift_Dictionary_Swift3 - Fatal编程技术网

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。非常感谢。当我阅读你的答案时,我也编写了这个代码,但我对数组感到困惑。现在我明白了!再次感谢您收听
备注
部分,非常感谢。当我阅读你的答案时,我也编写了这个代码,但我对数组感到困惑。现在我明白了!再次感谢您收听
备注
部分