Próbuję pokazać tabelę podobną do kontaktów z moją listą użytkowników.

Oświadczam globalną zmienną przyjaciół, które przechowują pierwszy znak nazwiska i listy użytkowników, których imię zacznie się od tego

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

W mojej metodzie fetch robię to

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

Po tym powinienem mieć tablicę moich przyjaciół z pierwszą literą imienia i użytkowników, którzy w nim spadają; Jednak słownik moich przyjaciół jest pusty.

Jak to naprawić?

Edytuj: Pójdę za tym tutorialem i nie dokładnie nie jest taki sam. -View-with-a-Mutable-D "> Swift: Jak wykonać alfabetycznie sekcja nagłówki w widoku tabeli z uznanym źródłem danych

0
Walker 16 luty 2017, 17:32

3 odpowiedzi

Najlepsza odpowiedź

Zamiast używać Character jako klucza, użyj String. Musisz mieć pewność, że init jest [User] dla każdego nowego pierwszego pierwszego klucza, który wkładasz do groupedNames. Trzymam tablicę groupedLetters, aby ułatwić uzyskanie liczby sekcji

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
dmorrow 16 luty 2017, 14:50

Tworzenie struktury Dictionary za pomocą Characters jako keys & amp; Wartości jako Array User będą bardziej zwięzły.

0
ystack 16 luty 2017, 14:36

Występuje błąd, ponieważ deklarujesz słownik , oznacza to, że musisz dodać klawisz / pustą parę tablicy, jeśli nie ma wpisu do tej postaci.

Rozważ także, aby skonsolidować znaki zapytania / wykrzykników

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)
}
0
vadian 16 luty 2017, 15:05