SwiftUI-2-Building Lists and Navigation
SwiftUI-2-Building Lists and Navigation
SwiftUI
1
Marketing /
Report
- Building lists and navigation
1
2.SwiftUI
2
Marketing /
Report
- Building lists and navigation
2
2.SwiftUI
3 - Building lists and navigation
Landmark.swift
Marketing /
Report
3
2.SwiftUI
4 - Building lists and navigation
import Foundation
Landmark.swift
4
2.SwiftUI
5 - Building lists and navigation
import Foundation
import SwiftUI
Landmark.swift
5
2.SwiftUI
6 - Building lists and navigation import Foundation
import SwiftUI
import CoreLocation
Landmark.swift
Report
6
ModelData.swift
2.SwiftUI
7 - Building lists and navigation import Foundation
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load
\(filename) from main bundle:\n\(error)")
}
do {
let decoder = JSONDecoder()
return try decoder.decode(T.self,
from: data)
Marketing /
} catch {
fatalError("Couldn't parse
ModelData.swift \(filename) as \(T.self):\n\(error)")
Report
}
}
7
2.SwiftUI
8 - Building lists and navigation
8
2.SwiftUI
9
Marketing /
Report
- Building lists and navigation
9
2.SwiftUI
10 - Building lists and navigation
LandmarkRow.swift
import SwiftUI
Text("Hello, World!")
}
}
Report
#Preview {
LandmarkRow()
} 10
2.SwiftUI
11 - Building lists and navigation import SwiftUI
#Preview {
LandmarkRow(landmark: landmarks[0])
}
Marketing /
LandmarkRow.swift
Report
11
import SwiftUI
2.SwiftUI
12 - Building lists and navigation
struct LandmarkRow: View {
var landmark: Landmark
Spacer()
}
}
}
#Preview {
LandmarkRow(landmark: landmarks[0])
}
Marketing /
LandmarkRow.swift
Report
12
2.SwiftUI
13
Marketing /
Report
- Building lists and navigation
13
import SwiftUI
2.SwiftUI
14 - Building lists and navigation
struct LandmarkRow: View {
var landmark: Landmark
Spacer()
}
}
}
#Preview {
LandmarkRow(landmark: landmarks[0])
}
#Preview {
LandmarkRow(landmark: landmarks[1])
}
Marketing /
Report
LandmarkRow.swift
14
import SwiftUI
2.SwiftUI
15 - Building lists and navigation
struct LandmarkRow: View {
var landmark: Landmark
Spacer()
}
}
}
#Preview("Turtle Rock") {
LandmarkRow(landmark: landmarks[0])
}
#Preview("Salmon") {
LandmarkRow(landmark: landmarks[1])
}
Marketing /
Report
LandmarkRow.swift
15
import SwiftUI
2.SwiftUI
16 - Building lists and navigation
struct LandmarkRow: View {
var landmark: Landmark
Spacer()
}
}
}
#Preview {
Group {
LandmarkRow(landmark:
landmarks[0])
LandmarkRow(landmark:
landmarks[1])
}
}
Marketing /
Report
LandmarkRow.swift
16
2.SwiftUI
17
Marketing /
Report
- Building lists and navigation
17
2.SwiftUI
18 - Building lists and navigation
LandmarkList.swift
import SwiftUI
}
}
}
Report
#Preview {
LandmarkList()
} 18
2.SwiftUI
19 - Building lists and navigation
LandmarkList.swift
Marketing /
Report
19
2.SwiftUI
20 - Building lists and navigation
LandmarkList.swift
import SwiftUI
}
}
}
Report
#Preview {
LandmarkList()
} 20
2.SwiftUI
21 - Building lists and navigation import Foundation
import SwiftUI
import CoreLocation
}
}
Landmark.swift
Report
21
2.SwiftUI
22 - Building lists and navigation import SwiftUI
#Preview {
LandmarkList()
}
LandmarkList.swift
Marketing /
Report
22
2.SwiftUI
23
Marketing /
Report
- Building lists and navigation
23
2.SwiftUI
24 - Building lists and navigation
import SwiftUI
CircleImage()
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text("Turtle Rock")
.font(.title)
HStack {
Text("Joshua Tree National
Park")
Spacer()
Text("California")
}
.font(.subheadline)
.foregroundStyle(.secondary)
Divider()
Spacer()
}
}
Marketing /
#Preview {
Report
LandmarkDetail()
}
LandmarkDetail.swift 24
2.SwiftUI
25 - Building lists and navigation
import SwiftUI
#Preview {
ContentView()
}
#Preview {
Report
LandmarkList()
}
25
LandmarkList.swift
2.SwiftUI
26 - Building lists and navigation
import SwiftUI
LandmarkDetail()
} label: {
LandmarkRow(landmark: landmark)
}
}
.navigationTitle("Landmarks")
} detail: {
Text("Select a
Landmark")
}
}
}
LandmarkList.swift #Preview {
Marketing /
LandmarkList()
}
Report
26
2.SwiftUI
27
Marketing /
Report
- Building lists and navigation
27
2.SwiftUI
28 - Building lists and navigation
import SwiftUI
#Preview {
CircleImage(image: Image("turtlerock"))
}
CircleImage.swift
Marketing /
Report
28
2.SwiftUI
29 - Building lists and navigation
import SwiftUI
import MapKit
MapView.swift #Preview {
MapView(coordinate:
CLLocationCoordinate2D(latitude: 34.011_286,
Marketing /
longitude: -116.166_868))
}
Report
29
2.SwiftUI
30 - Building lists and navigation
import SwiftUI
import MapKit
#Preview {
MapView(coordinate:
MapView.swift
Marketing /
CLLocationCoordinate2D(latitude: 34.011_286,
longitude: -116.166_868))
}
Report
30
2.SwiftUI
31 - Building lists and navigation import SwiftUI
CircleImage()
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text("Turtle Rock")
.font(.title)
HStack {
Text("Joshua Tree National Park")
Spacer()
Text("California")
}
.font(.subheadline)
.foregroundStyle(.secondary)
Divider()
Spacer()
}
Marketing /
}
}
LandmarkDetail.swift
Report
#Preview {
LandmarkDetail(landmark: landmarks[0])
}
31
2.SwiftUI
32 - Building lists and navigation
import SwiftUI
LandmarkList.swift #Preview {
LandmarkList()
}
Marketing /
Report
32
2.SwiftUI
33 - Building lists and navigation
import SwiftUI
CircleImage(image: landmark.image)
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text(landmark.name)
.font(.title)
HStack {
Text(landmark.park)
Spacer()
Text(landmark.state)
}
.font(.subheadline)
.foregroundStyle(.secondary)
Divider()
LandmarkDetail.swift
Text("About \(landmark.name)")
.font(.title2)
Text(landmark.description)
}
.padding()
Spacer()
Marketing /
}
}
}
Report
#Preview {
LandmarkDetail(landmark: landmarks[0])
}
33
2.SwiftUI
34 - Building lists and navigation
import SwiftUI
CircleImage(image: landmark.image)
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text(landmark.name)
.font(.title)
HStack {
Text(landmark.park)
Spacer()
Text(landmark.state)
}
.font(.subheadline)
LandmarkDetail.swift .foregroundStyle(.secondary)
Divider()
Text("About \(landmark.name)")
.font(.title2)
Marketing /
Text(landmark.description)
}
.padding()
}
Report
}
}
#Preview {
LandmarkDetail(landmark: landmarks[0])
} 34
2.SwiftUI
35 - Building lists and navigation
import SwiftUI
CircleImage(image: landmark.image)
.offset(y: -130)
.padding(.bottom, -130)
VStack(alignment: .leading) {
Text(landmark.name)
.font(.title)
HStack {
Text(landmark.park)
Spacer()
Text(landmark.state)
}
.font(.subheadline)
.foregroundStyle(.secondary)
Divider()
Text("About \(landmark.name)")
.font(.title2)
Text(landmark.description)
LandmarkDetail.swift }
Marketing /
.padding()
}
.navigationTitle(landmark.name)
.navigationBarTitleDisplayMode(.inline)
}
Report
}
LandmarkList preview
#Preview {
LandmarkDetail(landmark: landmarks[0])
}
35
2.SwiftUI
36
Marketing /
Report
- Building lists and navigation
36
2.SwiftUI
37
Marketing /
Report
- Building lists and navigation
37
2.SwiftUI
38
Marketing /
Report
- Building lists and navigation
38