2017-02-16 47 views
0

我试图显示一个类似于我的用户列表的联系人的tableview。追加到[字符:[object]]字典返回0键/值对

我宣布的朋友一个全局变量存储一个名字的第一个字符和其名字开始与

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

在我取方法的用户列表,我这样做

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

+0

如何定义你的'User'类? 'firstName'是一个可选的字符串吗? –

+0

@CraigGrummitt是可选的字符串!谢谢 – Walker

回答

0

而不是使用Character作为密钥,请使用String。您需要确保为插入到groupedNames的每个新的第一个初始密钥初始化[User]阵列。我不断的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) 
     } 

    } 
} 
+0

工程就像一个魅力。不能相信我错过了那个大声笑!欣赏它 – Walker

0

创建Dictionary结构Characterskeys &值的UserArray将更加简洁。

+0

这不正是我在做什么?我可能会误解你的陈述。 @ystack – Walker

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) 
}