Изменение порядка с помощью onMove
Перетаскивайте строки, чтобы изменить их порядок.
«Изменение порядка с помощью onMove» — бесплатный урок SwiftUI Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SwiftUI Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SwiftUI Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Let Users Reorder Rows
Sometimes order matters, like a to-do priority list. SwiftUI lets people drag rows into a new order with almost no extra code. ✨
Meet onMove
The onMove modifier sits on your ForEach and enables drag handles so rows can be picked up and dropped elsewhere.
The Move Signature
onMove gives you two things: an IndexSet of the rows being moved and an Int destination index where they should land.
func move(from source: IndexSet,
to destination: Int) {
}One Array Method Does It
Swift arrays have a built-in move(fromOffsets:toOffset:) that performs the reorder for you in a single, safe call.
items.move(fromOffsets: source,
toOffset: destination)Wiring onMove Up
Attach onMove(perform:) to the ForEach and point it at your move function. The list now supports drag-to-reorder.
ForEach(items) { item in
Text(item.name)
}
.onMove(perform: move)Edit Mode Reveals Handles
Drag handles often appear only in edit mode. An EditButton in the toolbar flips the list into editing so users can reorder.
.toolbar {
EditButton()
}Reorder Without Edit Mode
Inside a plain List, rows are frequently draggable straight away. Edit mode mainly matters when you also expose delete and move controls.
State Keeps Order Persistent
Because move() mutates your @State array, the new order survives view refreshes and reflects everywhere that array is read.
Combine Move and Delete
You can attach both onMove and onDelete to the same ForEach, giving users full control to reorder and remove rows.
ForEach(items) { Text($0.name) }
.onDelete(perform: delete)
.onMove(perform: move)Inline Move Closure
Like delete, you can write the reorder inline. Just call move(fromOffsets:toOffset:) directly inside the onMove closure.
.onMove { source, dest in
items.move(fromOffsets: source,
toOffset: dest)
}Smooth Drag Animations
SwiftUI animates the lift, slide, and settle of dragged rows automatically. You get polished motion with zero animation code.
Quick Check
What does onMove provide to your handler?
Recap: Reordering
You added drag-to-reorder by attaching onMove to a ForEach and calling move(fromOffsets:toOffset:) on your state array. 🎉
Часто задаваемые вопросы
Урок «Изменение порядка с помощью onMove» бесплатный?
Да — полный текст урока «Изменение порядка с помощью onMove» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SwiftUI Academy, подпишись на CoddyKit PRO. Курс SwiftUI Academy содержит 4 уроков всего.
Чему я научусь в уроке «Изменение порядка с помощью onMove»?
Перетаскивайте строки, чтобы изменить их порядок. Ты практикуешь SwiftUI Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SwiftUI Academy?
Предыдущий опыт не требуется. SwiftUI Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Изменение порядка с помощью onMove»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SwiftUI Academy?
Да. Каждый урок SwiftUI Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Удаление строк смахиванием
- Изменение порядка с помощью onMove
- Добавление новых элементов
- Обновление потягиванием