#swift #swiftui #dataflow
Вопрос:
Я упростил этот код из своей программы. Мне нужно лучше понять, как эти данные передаются. Что я хочу сделать, так это запустить функцию getChats, запросить имя пользователя, присвоить имя пользователя имени текущего пользователя и использовать его в другом месте. Что происходит, так это то, что, как только функциональный блок getChats заканчивается, он повторно инициализирует переменную в пустое значение. Почему он перезаписывает его пустой строкой? То же самое с chatsToMe, он написан с некоторой непустой информацией, функция заканчивается, и она повторно инициализируется в пустое состояние.
class SessionHandler: ObservableObject {
@Published private(set) var userSession: UserSession = initUserSession()
var currentUserUsername: String = ""
var chatsToMe = [Message]()
func initUserSession() -> UserSession {
func getChats() -> [Message] {
//This could be more complex, run server query, etc. for now...
userInformationDatabaseRoot.queryOrdered(byChild: "authId")
.queryEqual(toValue: Auth.auth().currentUser?.uid)
.observeSingleEvent(of: .value, with: { snapshot in
if !snapshot.exists() {
print (Auth.auth().currentUser?.uid ?? "")
print ("The ID doesn't exist")
}
else {
let user = snapshot.value as? NSDictionary
self.currentUserUsername = user?.allKeys[0] as! String
}
})
let _ = chatDatabaseRoot.child(self.currentUserUsername).observe(DataEventType.childAdded) { snapshot in
if let chats = snapshot.value as? NSDictionary {
let chat = Message(senderUsername: chats["sender"] as? String, recipientUsername: currentUserUsername, emoji: chats["emoji"] as? String)
print(chat)
chatsToMe.append(chat)
}
}
return UserSession(chatsToMe: getChats())
}