/ / ReactiveCocoa 4 MVVM най-добри практики с HTTP заявки - swift, mvvm, swift2, ios9, реактивно-какао

ReactiveCocoa 4 MVVM най-добра практика с HTTP заявки - swift, mvvm, swift2, ios9, реактивно-какао

Работя върху частта за вход в приложението си и мислех да използвам ReactiveCocoa 4. :)

Това е според мен init:

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

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

self.viewModel.initSignals()

Където setLoginButtonStatus просто ще деактивира / активира бутона и т.н. и status е просто енум.

И това е според мен модела „s 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
}
})

Изгледът трябва първо да деактивира бутона, след което да го активира отново, когато сесията приключи и кога response.isSuccessful() истина е.

Е, работи за сега, но се чудя дали Използвам 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.

Дали защото използвам v4.0.0-alpha.4 за Swift 2.1? Това всъщност забавя повторното активиране на бутона ми.

Аз се обърквам с примерите в мрежата, тъй като повечето от тях са в Objective-C и мисля, че някои имена на функции са променени и т.н. ...

Благодаря много!

Отговори:

1 за отговор № 1

Други могат да говорят за MVVM подход, който приемате, но по отношение на предупреждението, което виждате: това е, защото използвате UIKit от фонова нишка. Представям си, че това идва от self.setLoginButtonStatus обадете се. В зависимост от това, което сигнализира за вашето обвързване с това свойство, е възможно (и това се случва в този случай) стойностите, излъчвани от неговия производител не се излъчват върху основната нишка.

За да поправите това, можете да използвате observeOn, за да препратите стойности към основната нишка:

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