gpt4 book ai didi

swift - ReactiveCocoa 4 MVVM HTTP 请求最佳实践

转载 作者:行者123 更新时间:2023-11-30 10:09:11 24 4
gpt4 key购买 nike

我正在开发应用程序的登录部分,我想到使用 ReactiveCocoa 4。:)

这是在我的 View 的初始化中:

self.viewModel.loginSignal = self.LoginButton.rac_signalForControlEvents(UIControlEvents.TouchUpInside)!

self.viewModel.loginStatus.producer.startWithNext({ status in
self.setLoginButtonStatus(status)
})

self.viewModel.initSignals()

其中 setLoginButtonStatus 将仅禁用/启用按钮等,而 status 只是一个枚举。

这是在我的 View 模型的 initSignals()

self.loginSignal!.toSignalProducer().start({ sender in
self.validateLoginInput()
})

其中 loginSignal 声明为 var loginSignal: RACSignal?

这是在我的validateLoginInput

self.loginStatus.value = MyStatus.Login.IN_PROGRESS // So button would be disabled

session.rac_dataWithRequest(request).map({ data, response in
return MyResponse(data, response)
}).startWithNext({ response
// Say MyResponse class would check the reponse if login is successful
if response.isSuccessful() {
self.loginStatus.value = MyStatus.Login.SUCCESS
} else {
self.loginStatus.value = MyStatus.Login.FAIL
}
})

View 应首先禁用该按钮,然后在 session 完成且 response.isSuccessful() 为 true 时重新启用它。

嗯,它现在有效,但我想知道我是否正确地将 MVVM 与 ReactCocoa 4 一起使用。

此外,我还收到了一个让我有点困扰的“警告”。这看起来就像 HTTP 请求得到响应后一秒钟。

2015-12-02 12:15:32.566 MyProject[460:48610] This application is
modifying the autolayout engine from a background thread, which can
lead to engine corruption and weird crashes. This will cause an
exception in a future release.

是因为我在 Swift 2.1 上使用 v4.0.0-alpha.4 吗?这实际上延迟了-启用我的按钮

我对网络上的示例感到困惑,因为它们大多数都是 Objective-C 语言,我认为一些函数名称发生了变化,等等......

非常感谢!

最佳答案

其他人可以谈论您正在采用的 MVVM 方法,但关于您看到的警告:那是因为您正在从后台线程使用 UIKit。我想这来自 self.setLoginButtonStatus 调用。根据您与该属性的绑定(bind)信号,有可能(在这种情况下发生)其生产者发出的值不会在主线程上发出

要解决这个问题,您可以使用 observeOn 将值转发到主线程:

self.viewModel.loginStatus
.producer
.observeOn(UIScheduler())
.startWithNext { status in
self.setLoginButtonStatus(status)
)

关于swift - ReactiveCocoa 4 MVVM HTTP 请求最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34036605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com