NCMBではSwift向けにSDKをリリースしています。最近ではiOSアプリを作る際にSwiftを利用することが増えていますので、その場合にはネイティブ言語で実装されているSwift SDKの利用をお勧めします。
そんなSwift SDKの使い方を知ってもらうためにも、ちょっとしたアプリ(Todoアプリ)を作ってみました。徐々に機能を追加していきますので、Swift SDKの利用法をぜひ覚えてください。
今回は前回のACL設定をベースとして、タスクの編集機能を追加します。
編集画面への遷移を追加
これまでリスト表示を行っていた部分を変更して、編集画面(EditView)への遷移を追加します。
List { ForEach(self.Todo.todos, id: \.objectId) { todo in NavigationLink(destination: EditView(delegate: self, objectId: todo.objectId!, text: (todo["body"] ?? "") as String)) { Text((todo["body"] ?? "") as String) } } .onDelete(perform: delete) }
Delegateの追加
編集画面へのDelegateは次のようになります。
protocol EditViewDelegate { func editTodo(text: String, objectId: String) }
また、このDelegateを ContentView に追加します。
struct ContentView: View, InputViewDelegate, EditViewDelegate {
編集画面の追加
編集画面は次のようになります。リストから編集前のテキストと、objectIdを受け取っています。
struct EditView: View { @Environment(\.presentationMode) var presentation let delegate: EditViewDelegate @State var objectId: String @State var text: String var body: some View { VStack(spacing: 16) { TextField("タスクを編集してください", text: $text) .textFieldStyle(RoundedBorderTextFieldStyle()) Button("編集") { delegate.editTodo(text: text, objectId: objectId) presentation.wrappedValue.dismiss() } } .padding() } }
データを更新する
データを更新する処理 editTodo は ContentView に追加します。処理対象になるデータを検索し、そのbodyに新しいテキストを設定して更新します。更新後、リストのデータも新しいものに置き換えます。
func editTodo(text: String, objectId: String) { if let i = self.Todo.todos.firstIndex(where: { $0.objectId == objectId}) { let obj = self.Todo.todos[i] obj["body"] = text obj.saveInBackground(callback: { result in switch result { case .success(_): self.Todo.todos[i] = obj case let .failure(error): print("更新に失敗しました: \(error)") } }) } }
まとめ
これでTodoアプリの実装は完了です。データの追加と編集に削除、そしてタスクのACL設定まで行っています。認証とCRUD操作はどのようなアプリでも利用しますので、ぜひ応用して皆さんのアプリ開発に役立ててください。