前提・実現したいこと
Swift初学者です。Todoアプリを作成しており新規のtodoを作成で ObservableArray<Dictionary>に新しい辞書を追加できたのですがアプリを落とさず再度todoを追加するときに一つ前の辞書が消えてしまいます。値をBehaviorSubjectに流せば良いのかと考えたのですがRxにも慣れておらず良い方法が思いつかず困っています。
最終的に実現したいこととしては
アプリを落とすまではtoDosに辞書を追加し続け値に変更があるたびに表示するVCに配列を流せるようにしたいです。
該当のコード
全てView.Modelのコードです。
Swift
1import RxSwift 2import RxCocoa 3import ObservableArray_RxSwift 4 5final class CreateListViewModel { 6 7 let bag = DisposeBag() 8/// 中間Stream for Input 9 //PublishSubject:外からの入力のみを受け付ける 10 private let createBtnDidTapStream = PublishSubject<Void>() 11 private let genreStream = BehaviorSubject<String>(value: "") 12 private let toDoStream = BehaviorSubject<String>(value: "") 13/// 中間Stream for Output 14 private let navigateToMainStream = PublishSubject<Void>() 15 16 //仮説:ほんとはここに値を流して最新のものをあとで参照すれば良いのか 17 //private let toDoListStream = BehaviorSubject<[[String : Any]]>( value: [[:]]) 18 19 init() { 20 self.createBtnDidTapStream 21 .subscribe(onNext: {[weak self] _ in 22 self?.createList() 23 }) 24 .disposed(by: bag) 25 26 self.genreStream 27 .subscribe(onNext: { [weak self] genre in 28 print(genre) 29 }) 30 .disposed(by: bag) 31 self.toDoStream 32 .subscribe(onNext: { [weak self] toDo in 33 print(toDo) 34 }) 35 .disposed(by: bag) 36 } 37 38 39 var toDos: ObservableArray<Dictionary> = 40 [["toDo":"test", "hasDone": false, "genre": "test" ]] 41 42 func createList() { 43 //オンメモリでデータの一時保存。。これは保存というより代入 44 //データ保存の永続化は今回はなし 45 46 toDos.append([ 47 "toDo": try! toDoStream.value(), 48 "genre": try! genreStream.value(), 49 "hasDone": false 50 ]) 51 print(toDos) 52 //main画面へ遷移 53 self.navigateToMainStream.onNext(()) 54 55 56 } 57 58 59 60 func editStatus() { 61 62 } 63 64} 65///input 66extension CreateListViewModel { 67 //投稿ボタン 68 var createBtnDidTap: AnyObserver<()> { 69 return createBtnDidTapStream.asObserver() 70 } 71 //ジャンルテキストフィールド 72 var genre: AnyObserver<String> { 73 return genreStream.asObserver() 74 } 75 var toDo: AnyObserver<String> { 76 return toDoStream.asObserver() 77 } 78 79 80} 81 82 83///output 84extension CreateListViewModel { 85 var navigateToMain: Observable<Void> { 86 return self.navigateToMainStream.asObservable() 87 } 88// var toDoList: ObservableArray<[String: Any]> { 89// return self.toDoStream.asObservable() 90// } 91 92} 93 94 95
試したこと
return self.toDoStream.asObservable()でどうにか値を流せないか四苦八苦してました。
補足情報(FW/ツールのバージョンなど)
XCode 9.4.1
Swift 4.1.2
pod 1.5.3
配列をObservableにするためObservableArray_RxSwiftというライブラリを使っています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/23 06:48
2018/09/23 07:06
2018/09/23 08:25
2018/09/23 09:14
2018/09/23 17:40