Я совершенно новичок в серверных вызовах и архитектуре MVC в целом. Я полагаю, это глупый вопрос.
У меня есть переменная в моей модели, pressUsers, и я не уверен, какой способ связи с моим представлением будет обновлен.
Когда мое свойство class: UserPage: userID установлено, оно отправляется в базу данных и возвращает сохраненный массив других пользователей.
class UserPage {
private var pressedUsers = [String]()
var userID: String? = nil {
didSet{
getPressedUsersFromServer()
}
}
private func getPressedUsersFromServer(){
if(userID != nil){
let docRef = db.collection("users").document(userID!)
docRef.getDocument { (document, error) in
if let document = document, document.exists {
if let dbPressedUsers = document.get("matchedUsers") as? [String] {
print("found")
self.pressedUsers = dbPressedUsers
}
}
}
}
}
}
Если модель обновляет свой вид сразу после назначения идентификатора пользователя из-за задержки вызова сервера, информация от нажатых пользователей не отображается. Я мог бы передать V C непосредственно на UserPage и использовать его для обновления View после получения информации, но это, кажется, подрывает то, что я понимаю о MVC.
Мое (плохое) понимание заключается в том, что возможно правильный способ сделать это, чтобы реализовать протокол и создать свойство делегата в классе UserPage? что-то вроде
protocol matchedUserDelegate{
func pressedUsersUpdate(_ sender: UserPage)
}
и добавить свойство в UserPage?
var delegate: pressedUserDelegate?
var private var pressedUsers = [String]() {
didSet{
delegate.pressedUsersUpdate()
}
}
И обработать обновление вressedUsersUpdate в контроллере представления? Есть ли лучшая практика для чего-то подобного?