附加到[character:[object]]的字典会返回0键/值对

时间:2017-02-16 14:32:57

标签: swift dictionary

我正在尝试显示类似于与我的用户列表的联系人的tableview。

我声明了一个朋友的全局变量,它将存储名字的第一个字符和名字以

开头的用户列表
var friends = [Character: [User]]()

在我的fetch方法中,我这样做

for friend in newFriends {                      
    let letter = friend.firstName?[(friend.firstName?.startIndex)!]
    print(letter)                    
    self.friends[letter!]?.append(friend)
}

在此之后,我应该让我的朋友阵列中包含名字的第一个字母和落在其中的用户;但是,我的朋友字典是空的。

我该如何解决这个问题?

编辑:我正在按照本教程进行操作,但它并不完全相同.. Swift: How to make alphabetically section headers in table view with a mutable data source

3 个答案:

答案 0 :(得分:0)

创建(List.all Char.contains) s结构DictionaryCharacters& keys的{​​{1}}值将更加简洁。

答案 1 :(得分:0)

不要使用Character作为密钥,而是使用String。您需要确保为插入[User]的每个新的First Initial键初始化groupedNames数组。我保留了一个groupedLetters数组,以便更容易获得分数

var groupedNames = [String: [User]]()
var groupedLetters = Array<String>()

func filterNames() {
    groupedNames.removeAll()
    groupedLetters.removeAll()

    for friend in newFriends {
        let index = friend.firstName.index(friend.firstName.startIndex, offsetBy: 0)
        let firstLetter = String(friend.firstName[index]).uppercased()
        if groupedNames[firstLetter] != nil {
            //array already exists, just append
            groupedNames[firstLetter]?.append(friend)
        } else {
            //no array for that letter key - init array and store the letter in the groupedLetters array
            groupedNames[firstLetter] = [friend]
            groupedLetters.append(firstLetter)
        }

    }
}

答案 2 :(得分:0)

发生错误是因为您声明了一个字典,这意味着如果该字符没有条目,则必须添加一个键/空数组对。

还要考虑合并问题/感叹号

class User {
    let firstName : String

    init(firstName : String) {
        self.firstName = firstName
    }
}


var friends = [Character: [User]]()

let newFriends = [User(firstName:"foo"), User(firstName:"bar"), User(firstName:"baz")]

for friend in newFriends {
    let letter = friend.firstName[friend.firstName.startIndex]
    if friends[letter] == nil {
        friends[letter] = [User]()
    }
    friends[letter]!.append(friend)
}
相关问题