MVxパターンを使用してRxSwiftをコードに追加しようとしています。私のアプリは、APIからFoodType(砂漠、食事など)のリストを取得してRealmデータベースに保存する必要があります。次に、私はUITextFieldとUIButtonを持つビューを持っています。RxSwiftを使用した非同期API呼び出し後のビューの更新
ユーザーは、食品の種類、書き込みボタンクリックでアプリがAPIからFoodTypeとFoodListを取得する必要がない場合はレルムでDB
- 背景をその食品のショーのリストをFoodTypeレルム
ビューモデル
struct FoodTypeViewModel {
// Get datas from API
private func getFoods() {
foodService.getAll(completionHandler: { result in
switch result {
case .Success(let foods):
for food in foods {
food.save()
}
break
case .Failure(let error):
debugPrint(error)
break
}
})
}
// Get datas from API
private func getFoodTypes() {
foodService.getAll(completionHandler: { result in
switch result {
case .Success(let foodTypes):
for type in types {
type.save()
}
break
case .Failure(let error):
debugPrint(error)
break
}
})
}
}
からユーザが選択しました のViewController
class SetupViewController: UIViewController {
@IBOutlet weak var foodTypeTextField: UITextField!
@IBOutlet weak var foodTypeButton: UIButton!
}
モデル
class FoodType: Object {
dynamic var identifier: String = ""
dynamic var fullName: String?
let foods = List<Food>()
}
私は、そのコードにRxSwiftを追加したいが、どのように私は、非同期APIを扱うことができます。最初の起動時には、アプリケーションにはデータがありません(私は開始時には挿入したくありません)が、ユーザーがボタンをクリックするとデータがありません。したがって、ボタンをクリックすると、UIは待機アニメーションを使用してサービスからの応答を待機し、サービスが応答するとViewModelはUIを更新する必要があります。何か案が ?
ありがとうございますが、それは領域を処理する最善の方法ですか?つまり、アプリの生活の中でローカルストレージのみを使用する方法があると私は考えました。 APIはDBとのみ通信し、ビューはDBの変更に反応します。あなたの場合、私はAPIからのデータを待つべきです。私が何を意味するのか理解していますか? Btw、この非常に良い答えとクラスのおかげで! – Ludovic
@ルドビックローカルデータベースの変更を観測可能ファイルとしてバインドすることもできます。私の編集を見てください。 – redent84
お返事ありがとうございます! – Ludovic