Skip to content

Commit be24220

Browse files
committed
Refactor example app
1 parent 58db45f commit be24220

File tree

5 files changed

+40
-53
lines changed

5 files changed

+40
-53
lines changed

Examples/TheMovieDB/CustomHooks/UseFetchPage.swift

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,10 @@ func useFetchPage<Response: Decodable>(
1717
results.current += response.results
1818
}
1919

20-
guard page.current == 0 else {
21-
return (status: .success(results.current), fetch: fetch)
22-
}
23-
24-
switch status {
25-
case .pending:
26-
return (status: .pending, fetch: fetch)
27-
28-
case .running:
29-
return (status: .running, fetch: fetch)
20+
let newStatus =
21+
page.current == 0
22+
? status.map { _ in results.current }
23+
: .success(results.current)
3024

31-
case .success:
32-
return (status: .success(results.current), fetch: fetch)
33-
34-
case .failure(let error):
35-
return (status: .failure(error), fetch: fetch)
36-
}
25+
return (status: newStatus, fetch: fetch)
3726
}

Examples/TheMovieDB/CustomHooks/UseNetworkImage.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,5 @@ func useNetworkImage(for path: String, size: NetworkImageSize) -> UIImage? {
1414
.receive(on: DispatchQueue.main)
1515
}
1616

17-
switch status {
18-
case .success(let image):
19-
return image
20-
21-
case .failure, .pending, .running:
22-
return nil
23-
}
17+
return try? status.get() ?? nil
2418
}

Examples/TheMovieDB/TopRatedMoviesPage.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ struct TopRatedMoviesPage: HookView {
1818
failure(error, onReload: fetch)
1919

2020
case .pending, .running:
21-
ProgressView()
21+
loading
2222
}
2323
}
2424
.navigationTitle("Top Rated Movies")
@@ -31,6 +31,10 @@ struct TopRatedMoviesPage: HookView {
3131
.onAppear(perform: fetch)
3232
}
3333

34+
var loading: some View {
35+
ProgressView().frame(maxWidth: .infinity, maxHeight: .infinity)
36+
}
37+
3438
func failure(_ error: URLError, onReload: @escaping () -> Void) -> some View {
3539
VStack(spacing: 16) {
3640
Text("Failed to fetch movies")

Sources/Hooks/AsyncStatus.swift

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ public enum AsyncStatus<Success, Failure: Error> {
2525
/// If this instance represents a `pending` or a `running`, this returns nil.
2626
public var result: Result<Success, Failure>? {
2727
switch self {
28-
case .pending, .running:
29-
return nil
28+
case .pending, .running:
29+
return nil
3030

31-
case .success(let success):
32-
return .success(success)
31+
case .success(let success):
32+
return .success(success)
3333

34-
case .failure(let error):
35-
return .failure(error)
34+
case .failure(let error):
35+
return .failure(error)
3636
}
3737
}
3838

@@ -55,17 +55,17 @@ public enum AsyncStatus<Success, Failure: Error> {
5555
/// - Returns: An `AsyncStatus` instance, either from the closure or the previous `.success`.
5656
public func flatMap<NewSuccess>(_ transform: (Success) -> AsyncStatus<NewSuccess, Failure>) -> AsyncStatus<NewSuccess, Failure> {
5757
switch self {
58-
case .pending:
59-
return .pending
58+
case .pending:
59+
return .pending
6060

61-
case .running:
62-
return .running
61+
case .running:
62+
return .running
6363

64-
case .success(let value):
65-
return transform(value)
64+
case .success(let value):
65+
return transform(value)
6666

67-
case .failure(let error):
68-
return .failure(error)
67+
case .failure(let error):
68+
return .failure(error)
6969
}
7070
}
7171

@@ -74,17 +74,17 @@ public enum AsyncStatus<Success, Failure: Error> {
7474
/// - Returns: An `AsyncStatus` instance, either from the closure or the previous `.failure`.
7575
public func flatMapError<NewFailure: Error>(_ transform: (Failure) -> AsyncStatus<Success, NewFailure>) -> AsyncStatus<Success, NewFailure> {
7676
switch self {
77-
case .pending:
78-
return .pending
77+
case .pending:
78+
return .pending
7979

80-
case .running:
81-
return .running
80+
case .running:
81+
return .running
8282

83-
case .success(let value):
84-
return .success(value)
83+
case .success(let value):
84+
return .success(value)
8585

86-
case .failure(let error):
87-
return transform(error)
86+
case .failure(let error):
87+
return transform(error)
8888
}
8989
}
9090

@@ -96,14 +96,14 @@ public enum AsyncStatus<Success, Failure: Error> {
9696
/// - Returns: The success value, if the instance represents a success,If the status is `pending` or `running`, this returns nil. .
9797
public func get() throws -> Success? {
9898
switch self {
99-
case .pending, .running:
100-
return nil
99+
case .pending, .running:
100+
return nil
101101

102-
case .success(let value):
103-
return value
102+
case .success(let value):
103+
return value
104104

105-
case .failure(let error):
106-
throw error
105+
case .failure(let error):
106+
throw error
107107
}
108108
}
109109
}

Tests/AsyncStatusTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ final class AsyncStatusTests: XCTestCase {
142142
nil,
143143
nil,
144144
100,
145-
nil
145+
nil,
146146
]
147147

148148
for (status, expected) in zip(statuses, expected) {

0 commit comments

Comments
 (0)