如何使用 swift 从 MutableArray 使用 header 在 TableView 中创建字母部分 3

How to create alphabetic sections in TableView with header from MutableArray using swift 3

我正在尝试向我的 table 添加部分,但我无法从我的 MutableArray(我的 database 包含 60 个值)中获取我的第一封信一个dictionary。 我想创建字母 sections,第一个字母作为 header,部分中的行数作为所有以该字母开头的值。

我的代码:

func getSectionsFromData() -> Dictionary<Character,String> {

    var sectionDictionary = Dictionary<Character, String>()

    let crime: CrimesInfo = marrCrimesNames.object(at: 0) as! CrimesInfo
    var crimeFirstLetter: AnyObject
    let crimeName = crime.Name

    for crime in marrCrimesNames {
        crimeFirstLetter = crimeName.characters.first! as AnyObject
        print(crimeFirstLetter)
    }
    return sectionDictionary
}

输出:

"A" // 60 次

for crime in marrCrimesNames {
    crimeFirstLetter = crimeName.characters.first! as AnyObject
    print(crimeFirstLetter)
}

您实际上并没有使用 crime 变量 相反,您只使用了 crimeName,这就是为什么您一直得到 "A" 的原因。

试试看

for crime in marrCrimesNames {
    crimeFirstLetter = crime.Name.characters.first! as AnyObject
    print(crimeFirstLetter)
}

现在创建一个像这样的字典:

let dict = ["A" : ["Aname1", "Aname2", "Aname3"], "B" : ["Bname1", "Bname2", "Bname3"]]

来自这样的数组:

let array = ["Aname1", "Aname2", "Aname3", "Bname1", "Bname2", "Bname3"]

您可以使用此代码:

let dict = ["A" : ["Aname1", "Aname2", "Aname3"], "B" : ["Bname1", "Bname2", "Bname3"]]

let characters = Array(Set(array.flatMap({ [=14=].characters.first })))

var result = [String: [String]]()

for character in characters.map({ String([=14=]) }) {
    result[character] = array.filter({ [=14=].hasPrefix(character) })
}

print(result) // output: ["B": ["Bname1", "Bname2", "Bname3"], "A": ["Aname1", "Aname2", "Aname3"]]