Обновление контроллера представления от лучшей практики обращения к серверу - PullRequest
0 голосов
/ 29 апреля 2020

Я совершенно новичок в серверных вызовах и архитектуре 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 в контроллере представления? Есть ли лучшая практика для чего-то подобного?

...