2017-02-16 46 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) 
}