【SwiftUI】Listの行入れ替え

(2021/09/28 更新)

Listの行入れ替え処理の実現方法について解説します。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】13.0
【Swift】5.5
【iOS】15.0
【macOS】Big Sur バージョン 11.6
スポンサーリンク

前提条件

行入れ替えを実現するには、次の3つの条件を満たしたリストが必要です。

  1. リストに関連付けられたコレクション(配列)が、@State等で宣言されており、更新可能である。
  2. List + ForEach でリストが生成されている。
    →行入れ替え処理はForEachのModifierを使って実現します。
  3. ForEachは範囲指定ではなくid指定による繰り返し。
    →各行の一意性が確保されている必要があります。

UntitledImage

スポンサーリンク

編集モードの切り替えボタン追加

行入れ替え操作を行うには、リストを編集モードに切り替える必要があります。
その為に、編集モードの切り替えをするEditButtonを追加します。

以下はEditButtonをナビゲーションボタンとして配置した例です。

UntitledImage

スポンサーリンク

行入れ替え処理の追加

ForEachのonMove(perform:)モディファイアで、行入れ替え時に呼び出すメソッド名を指定します。
指定されたメソッドは"(移動元:IndexSet, 移動先:Int) -> Void"の形式で呼び出されます。

呼び出されるメソッド(rowReplace)には、コレクション(配列)の順序を入れ替える処理を記述します。
この中で使用しているmove(fromOffsets:, toOffset:)は、配列の順序を入れ替えるメソッドです。
このメソッドは、MutableCollectionプロトコルで宣言されており、iOS13以降でのみ使用可能です。

UntitledImage

Editボタンを押して編集モードにすると、ドラッグで行入れ替えが可能になります。

スポンサーリンク

あわせて読みたい記事

【SwiftUI】Listの使い方
(2021/09/26 更新)Listはデータの一覧表示をするのに適したViewです。画面に収まらない量の場合はスクロール表示になるなど、UIKitのUITableViewに似ていますが、はるかに簡単に使えます。ListはForEa...
【SwiftUI】Listの行削除
(2021/09/26 更新)Listで生成したデータ一覧の行削除処理について解説します。
【SwiftUI】選択可能なListの生成
選択可能なListを生成する方法を解説します。