iOS Swift Siesta ResourceObserver ResourceRequestProgress从未打



我正在使用siesta进行休息呼叫,我正在尝试创建一个简单的资源浏览器来显示Svprogresshud。

open class SVProgressHUDResourceObserver: ResourceObserver {
    static let sharedInstance = SVProgressHUDResourceObserver()
    // Show/Hide SVProgressHUD
    public func resourceRequestProgress(for resource: Resource, progress: Double) {
        print("SVProgressHUDResourceObserver resourceRequestProgress - progress=(progress)")
        if progress == 1 {
            print("SVProgressHUD.dismiss()")
            SVProgressHUD.dismiss()
        } else if !SVProgressHUD.isVisible() {
            print("show()")
            SVProgressHUD.show()
        }
    }
    public func resourceChanged(_ resource: Resource, event: ResourceEvent) {
        print("SVProgressHUDResourceObserver resourceChanged  event=(event)")
    }
}

由于它是单身人士,所以我使用弱参考添加观察者:

@discardableResult func login(_ username: String, _ password: String,
                                  onSuccess: @escaping (LoginResponse) -> Void,
                                  onFailure: @escaping (Int?, String) -> Void) -> Request {
        return service.resource("/app/v1/authentication/login")
            .addObserver(SVProgressHUDResourceObserver.sharedInstance)
            .request(.post, json: [
                "username": username,
                "password": password
                ])
            .onSuccess { entity in
                guard let loginResponse: LoginResponse = entity.typedContent() else {
                    onFailure(0, "JSON parsing error")
                    return
                }
                self.authToken = loginResponse.session.token
                SessionManager.beginNewSession(loginResponse)
                onSuccess(loginResponse)
            }
            .onFailure { (error) in
                onFailure(error.httpStatusCode, error.userMessage)
        }
    }

i故意向登录中添加了10秒的延迟,但是Svprogresshud从未显示,事实上,ResourceRecerQuestProgress方法从未被调用。身份验证过程效果很好。

日志输出是:

SVProgressHUDResourceObserver resourceChanged  event=observerAdded
SVProgressHUDResourceObserver resourceChanged  event=newData(wipe)

将其上班的任何帮助都将不胜感激。

之间的午睡有所不同
  1. 整个资源本身的状态 ,塞斯塔在塞斯塔(Siesta
  2. 与资源有关的单个请求的结果,Siesta发送给请求挂钩,但最终丢弃了请求。

请注意,如果任何人更新资源的状态,观察者将继续获得通知,而仅使用#2使用#2的挂钩,则专门为该请求注册了通知。

这两个带有不同种类的信息。#1是为了更新资源状态的正在进行的共享真理("当前用户的配置文件"(,而#2则用于对资源上特定 Action 的状态进行更新("更改"用户的密码"(。

在用户指南中花费一些时间来消化"请求与加载"。然后,一旦您了解了这一点,请继续阅读。


在此代码中,您将SVProgressHUDResourceObserver.sharedInstance作为资源本身的观察者附加:

    return service.resource("/app/v1/authentication/login")
        .addObserver(SVProgressHUDResourceObserver.sharedInstance)

…这意味着它将仅收到load()请求的通知。但是您永远不会load;您仅request IT:

        .request(.post, json: [
            "username": username,
            "password": password
            ])

…这意味着您将特定请求附加到上的请求挂钩( onSuccessonFailure(。


如果您只需要一个进度栏,请ditch ResourceObserver并使用请求的 onProgress钩子。

(如果您需要保存登录的结果,则用户指南列出了如何根据POST请求更新资源的状态。但是,看起来您已经通过其他方式来存储Auth corpers,这是一种典型而又很好的方法。(

相关内容

  • 没有找到相关文章

最新更新