私はテーブルビューコントローラーを使用して、ユーザーの職業に基づいてユーザーを区分しています。私は辞書から始めて、それを構造体に変換してさまざまなセクションを表示しています。
辞書は、ユーザーオブジェクトの文字列と配列を取ります。
var userByOccupation: [String: [User]] = [:]
バックエンド(firestore)から職業をプルし、次にユーザーをプルしてから、指定した職業にユーザーを追加します。ただし、値とキーを設定し、辞書から値の数を出力すると、nilが返されます。
getUsers()関数でエラーが発生します:
(出力もマークされている最後の3行を参照してください)
func getOccupations(){
let db = Firestore.firestore()
db.collection("occupations").getDocuments { (snapshot, err) in
if let error = err {
print("There was an error fetching documents: \(error)")
} else {
guard let documents = snapshot?.documents else { return }
for document in documents {
var occupationID = document.documentID
db.collection("occupations").document(occupationID).collection("users").getDocuments(completion: { (secondSnapshot, error) in
if let err = error {
print("There was an error fetching documents: \(err)")
} else {
guard let secondDocuments = secondSnapshot?.documents else { return }
for document in secondDocuments {
self.getUsers(occupationID: occupationID, userID: document.documentID)
}
}
})
}
}
}
}
func getUsers(occupationID: String, userID: String) {
let db = Firestore.firestore()
db.collection("users").document(userID).getDocument(completion: { (snapshot, error) in
if let err = error {
print("There was an error fetching documents: \(err)")
} else {
if let dictionary = snapshot?.data() {
let user = User(dictionary: dictionary as [String: AnyObject])
user.id = snapshot?.documentID
print(occupationID) //MARK - prints: Janitor
print(user.name) //MARK - prints: Jason
self.userByOccupation[occupationID]?.append(user) //MARK: Setting the key & values
print(self.userByOccupation.keys.count) //MARK - prints: nil.
}
}
})
}
どちらを使用?
するself.userByOccupation[occupationID]
とnil
、最初はステートメントが無意味になります
self.userByOccupation[occupationID]?.append(user)
への変更
self.userByOccupation[occupationID] = [user] // or use +=
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加