Reordenando com onMove
Arraste as linhas para reordená-las.
Reordenando com onMove é uma aula grátis de SwiftUI Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SwiftUI Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SwiftUI Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
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. 🎉
Perguntas Frequentes
A aula “Reordenando com onMove” é grátis?
Sim — o texto completo de “Reordenando com onMove” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SwiftUI Academy, atualize para CoddyKit PRO. O curso de SwiftUI Academy inclui 4 aulas no total.
O que vou aprender em “Reordenando com onMove”?
Arraste as linhas para reordená-las. Você pratica SwiftUI Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SwiftUI Academy?
Nenhuma experiência prévia é necessária. SwiftUI Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Reordenando com onMove”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SwiftUI Academy?
Sim. Cada aula de SwiftUI Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Linhas com deslize para excluir
- Reordenando com onMove
- Adicionando novos itens
- Deslize para atualizar