前提・実現したいこと
ToDoアプリを作成中です。
勉強のため、RxSwift×MVVMで実装しています。
ボタンをタップしたら、カテゴリ(category)、タスク名(taskTitle)、日付(date)を保存したいです。
ただ、AddTaskViewModelで下記エラーが発生しています。
引数の数が違う場合に発生するエラーのようですが、調べてみてもどこを修正すれば良いか分からず、ご教示いただけませんでしょうか。
swift
1.flatMapLatest { [unowned self] (category: String, taskTitle: String, date: String) in 2//エラー:Contextual closure type '(_) -> SharedSequence<_, _>' expects 1 argument, but 3 were used in closure body
該当のソースコード
AddTaskModel
1class AddTaskModel { 2 3 private let userDefaults = UserDefaults.standard 4 5 //タスクを取得 6 func searchTask(category: String) -> [[String: String]] { 7 if let tasks = userDefaults.array(forKey: category) as? [[String: String]] { 8 return tasks 9 } 10 return [] 11 } 12 13 //タスクを保存 14 func saveTask(category: String, taskTitle: String, date: String) -> Observable<Void> { 15 return Observable.create { [unowned self] observer in 16 var tasks = self.searchTask(category: category) 17 tasks.insert(["taskTitle": taskTitle, "date": date], at: 0) 18 self.userDefaults.set(tasks, forKey: category) 19 observer.onNext(()) 20 return Disposables.create() 21 } 22 } 23} 24
AddTaskViewModel
1import Foundation 2import RxSwift 3import RxCocoa 4 5class AddTaskViewModel { 6 7 struct Input { 8 let addTrigger: Driver<Void> 9 let category: Driver<String> 10 let taskTitle: Driver<String> 11 let date: Driver<String> 12 } 13 14 struct Output { 15 let add: Driver<Void> 16 } 17 18 private let addTaskModel: AddTaskModel 19 20 init(addTaskModel: AddTaskModel) { 21 self.addTaskModel = addTaskModel 22 } 23 24 func transform(input: AddTaskViewModel.Input) -> AddTaskViewModel.Output { 25 let requiredInputs = Driver.combineLatest(input.category, input.taskTitle, input.date) 26 let addTask = input.addTrigger 27 .withLatestFrom(requiredInputs) 28 .flatMapLatest { [unowned self] (category: String, taskTitle: String, date: String) in //エラー:Contextual closure type '(_) -> SharedSequence<_, _>' expects 1 argument, but 3 were used in closure body 29 return self.addTaskModel.saveTask(category: category, taskTitle: taskTitle, date: date) 30 } 31 return AddTaskViewModel.Output(add: addTask) 32 } 33
バージョン
Xcode:10.1
Swift:4.2.1
RxSwift::4.0.0
参考
あなたの回答
tips
プレビュー