質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1585閲覧

【Swift】引数の数が違う? Contextual closure type '(_) -> SharedSequence<_, _>' expects 1 argument, but 3 were

duck015

総合スコア29

RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/03/28 01:45

編集2020/03/28 06:29

前提・実現したいこと

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

参考

iOSをMVC,MVP,MVVM,Clean Architectureで実装してみた

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/03/28 05:17

Xcode (というか Swift) と RxSwift のバージョンを教えてください。私の手元では別のところ (withLatestFrom と self.addTaskModel.saveTask) でエラーが出るので…。
duck015

2020/03/28 06:28

各バージョンは下記になります。 Xcode:10.1 Swift:4.2.1 RxSwift::4.0.0
hoshi-takanori

2020/03/28 07:27

それはちょっと古いですね。そして、Xcode 11.4 では RxSwift 4.0.0 はビルドできませんでした…。
duck015

2020/03/28 14:37

バージョンによって違うんですね...。 もう少し調べてみたいと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問