Я пытаюсь получить служебные данные в презентаторе, а затем вызывать метод из ведущего, используя ссылку на представление в ViewController ho можно ли получить обратный вызов из службы. у меня есть служба/Presenter/Просмотр Мой код выглядит следующим образомкак вызвать Swift замыкание callback
ViewController
class ViewController: UIViewController, UserView {
private var userPresenter: UserPresenter?
override func viewDidLoad() {
super.viewDidLoad()
userPresenter = UserPresenter(userView: self)
userPresenter?.getUsers()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func startLoading() {
print("Start loading is called")
}
func stopLoading() {
print("Stop loading is called")
}
func onEmpty() {
print("Empty users returned")
}
func onUsers(users: [User]) {
for userItem in users {
print("User name \(userItem.getName())")
}
}
}
Посмотреть
protocol UserView: NSObjectProtocol {
func startLoading()
func stopLoading()
func onUsers(users: [User])
func onEmpty()
}
Сервис
public class UserService {
func getUsers(delay: Double, completion: @escaping ([User]) -> Void) {
var users = [User]()
users.append(User(name: "User 1", email:"[email protected]", age: 25))
users.append(User(name: "User 2", email: "[email protected]", age: 26))
users.append(User(name: "User 3", email: "[email protected]", age: 27))
DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
print("Sending users")
completion(users)
print("Sent user")
}
}
}
Presenter
class UserPresenter {
private var userService: UserService
weak private var userView: UserView?
init(userView: UserView) {
self.userView = userView
userService = UserService()
}
func detachView() {
self.userView = nil
}
func getUsers() {
self.userView?.startLoading()
userService.getUsers(delay: 5000, completion: {
users: [User] -> Void
print("adad")
})
}
Как я должен получить метод обратного вызова при асинхронном выполнении задачи
func getUsers() {
self.userView?.startLoading()
userService.getUsers(delay: 5000){ users in
print("\(users.count) users added")
// self.userView?.onUsers(users: users)
// self.userView?.stopLoading()
}
}
Это не работает, как указано в ответе на @vadian
Задержка 5000 означает 5000 секунд – Cruz