mirror of
https://github.com/ivanvorobei/SwiftUI.git
synced 2026-03-22 17:39:26 +01:00
Add Async image loading
This commit is contained in:
7
Examples/Time Travel/SwiftUITimeTravel/TodoList/Model/TodoItem.swift
Executable file
7
Examples/Time Travel/SwiftUITimeTravel/TodoList/Model/TodoItem.swift
Executable file
@@ -0,0 +1,7 @@
|
||||
import SwiftUI
|
||||
|
||||
struct TodoItem: Identifiable {
|
||||
var id: UUID
|
||||
var title: String
|
||||
var isFinished: Bool
|
||||
}
|
||||
39
Examples/Time Travel/SwiftUITimeTravel/TodoList/Model/TodoState.swift
Executable file
39
Examples/Time Travel/SwiftUITimeTravel/TodoList/Model/TodoState.swift
Executable file
@@ -0,0 +1,39 @@
|
||||
import SwiftUI
|
||||
|
||||
struct TodoState {
|
||||
var isCreatingItem: Bool = false
|
||||
var partialItemName: String = ""
|
||||
var todoItems: [TodoItem] = []
|
||||
}
|
||||
|
||||
extension TodoState: StateMachine {
|
||||
|
||||
enum Event {
|
||||
case startCreatingItem
|
||||
case cancelCreatingItem
|
||||
case changePartialItemName(String)
|
||||
case addItem
|
||||
case setItemDone(identifier: UUID, isDone: Bool)
|
||||
}
|
||||
|
||||
mutating func update(with event: TodoState.Event) {
|
||||
switch event {
|
||||
case .addItem:
|
||||
todoItems.append(TodoItem(id: UUID(), title: partialItemName, isFinished: false))
|
||||
partialItemName = ""
|
||||
isCreatingItem = false
|
||||
case .changePartialItemName(let name):
|
||||
partialItemName = name
|
||||
case .cancelCreatingItem:
|
||||
isCreatingItem = false
|
||||
case .startCreatingItem:
|
||||
isCreatingItem = true
|
||||
partialItemName = ""
|
||||
case .setItemDone(let identifier, let isDone):
|
||||
if let index = todoItems.firstIndex(where: { $0.id == identifier }) {
|
||||
todoItems[index].isFinished = isDone
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user