SwiftUI-3-Handling User Input
SwiftUI-3-Handling User Input
SwiftUI
1
Marketing /
Report
- Handling user input
1
[Link]
2
Marketing /
Report
- Handling user input
2
import Foundation
[Link]
3 - Handling user input import SwiftUI
import CoreLocation
[Link]
3
import SwiftUI
[Link]
4 - Handling user input
struct LandmarkRow: View {
var landmark: Landmark
Spacer()
if [Link] {
Image(systemName: "[Link]")
}
}
}
}
#Preview {
Group {
LandmarkRow(landmark: landmarks[0])
LandmarkRow(landmark: landmarks[1])
}
Marketing /
}
Report
[Link]
4
[Link]
5 - Handling user input import SwiftUI
Spacer()
if [Link] {
Image(systemName: "[Link]")
.foregroundStyle(.yellow)
}
}
}
}
#Preview {
Group {
Marketing /
LandmarkRow(landmark: landmarks[0])
LandmarkRow(landmark: landmarks[1])
}
Report
[Link]
5
[Link]
6
Marketing /
Report
- Handling user input
6
[Link]
7 - Handling user input import SwiftUI
#Preview {
LandmarkList()
}
Marketing /
Report
[Link]
7
[Link]
8
Marketing /
Report
- Handling user input
8
[Link]
9 - Handling user input import SwiftUI
LandmarkDetail(landmark: landmark)
} label: {
LandmarkRow(landmark: landmark)
}
}
.navigationTitle("Landmarks")
} detail: {
Text("Select a Landmark")
}
}
}
Marketing /
#Preview {
Report
LandmarkList()
}
[Link]
9
[Link]
10
Marketing /
Report
- Handling user input
10
[Link]
11 - Handling user input import SwiftUI
ForEach(filteredLandmarks) {
landmark in
NavigationLink {
LandmarkDetail(landmark: landmark)
} label: {
LandmarkRow(landmark:
landmark)
}
}
}
.navigationTitle("Landmarks")
} detail: {
Text("Select a Landmark")
Marketing /
}
}
}
Report
[Link] #Preview {
LandmarkList()
}
11
[Link]
12 - Handling user input import SwiftUI
ForEach(filteredLandmarks) { landmark in
NavigationLink {
LandmarkDetail(landmark: landmark)
} label: {
LandmarkRow(landmark: landmark)
}
}
}
.animation(.default, value: filteredLandmarks)
.navigationTitle("Landmarks")
} detail: {
Text("Select a Landmark")
}
}
}
Marketing /
#Preview {
LandmarkList()
}
Report
[Link]
12
[Link]
13
Marketing /
Report
- Handling user input
13
[Link]
14
Marketing /
Report
- Handling user input
14
[Link]
15 - Handling user input import Foundation
@Observable
class ModelData {
var landmarks: [Landmark] = load("[Link]")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main
bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try [Link]([Link], from: data)
} catch {
fatalError("Couldn't parse \(filename) as
\([Link]):\n\(error)")
}
Marketing /
}
[Link]
Report
15
[Link]
16
Marketing /
Report
- Handling user input
16
[Link]
17 - Handling user input import SwiftUI
ForEach(filteredLandmarks) { landmark in
NavigationLink {
LandmarkDetail(landmark: landmark)
} label: {
LandmarkRow(landmark: landmark)
}
}
}
.animation(.default, value: filteredLandmarks)
.navigationTitle("Landmarks")
} detail: {
Text("Select a Landmark")
}
}
Marketing /
}
Report
#Preview {
LandmarkList()
.environment(ModelData())
}
17
[Link]
[Link]
18 - Handling user input import SwiftUI
CircleImage(image: [Link])
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text([Link])
.font(.title)
HStack {
Text([Link])
Spacer()
Text([Link])
}
.font(.subheadline)
.foregroundStyle(.secondary)
Divider()
Text("About \([Link])")
.font(.title2)
Text([Link])
}
.padding()
}
Marketing /
.navigationTitle([Link])
.navigationBarTitleDisplayMode(.inline)
}
}
Report
#Preview {
LandmarkDetail(landmark: ModelData().landmarks[0])
}
18
[Link]
[Link]
19 - Handling user input import SwiftUI
Spacer()
if [Link] {
Image(systemName: "[Link]")
.imageScale(.medium)
.foregroundStyle(.yellow)
}
}
}
}
#Preview {
let landmarks = ModelData().landmarks
return Group {
LandmarkRow(landmark: landmarks[0])
Marketing /
LandmarkRow(landmark: landmarks[1])
}
}
Report
19
[Link]
[Link]
20 - Handling user input import SwiftUI
#Preview {
ContentView()
.environment(ModelData())
}
[Link]
import SwiftUI
@main
struct LandmarksApp: App {
@State private var modelData = ModelData()
[Link]
Report
20
[Link]
21
Marketing /
Report
- Handling user input
21
[Link]
22
Marketing /
Report
- Handling user input
22
[Link]
23 - Handling user input
import SwiftUI
#Preview {
FavoriteButton(isSet:
.constant(true))
}
[Link]
Marketing /
Report
23
[Link]
24 - Handling user input
import SwiftUI
}
[Link] }
#Preview {
FavoriteButton(isSet: .constant(true))
}
Landmarks Helper 24
[Link]
25 - Handling user input import SwiftUI
CircleImage(image: [Link])
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text([Link])
.font(.title)
HStack {
Text([Link])
Spacer()
Text([Link])
}
.font(.subheadline)
.foregroundStyle(.secondary)
Divider()
Text("About \([Link])")
.font(.title2)
Text([Link])
}
.padding()
}
Marketing /
.navigationTitle([Link])
.navigationBarTitleDisplayMode(.inline)
}
}
Report
#Preview {
let modelData = ModelData()
return LandmarkDetail(landmark: [Link][0])
.environment(modelData)
}
[Link] 25
[Link]
26 - Handling user input import SwiftUI
ScrollView {
MapView(coordinate: [Link])
.frame(height: 300)
CircleImage(image: [Link])
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
HStack {
Text([Link])
.font(.title)
FavoriteButton(isSet: $[Link][landmarkIndex].isFavorite)
}
HStack {
Text([Link])
Spacer()
Text([Link])
}
.font(.subheadline)
.foregroundStyle(.secondary)
Divider()
Text("About \([Link])")
.font(.title2)
Text([Link])
}
Marketing /
.padding()
}
.navigationTitle([Link])
.navigationBarTitleDisplayMode(.inline)
}
Report
#Preview {
let modelData = ModelData()
return LandmarkDetail(landmark: [Link][0])
.environment(modelData)
[Link] } 1
[Link]
27
Marketing /
Report
- Handling user input
27