Skip to content
This repository was archived by the owner on Jun 13, 2024. It is now read-only.

Commit c1a76bd

Browse files
committed
Use Swift Foundation Result type to represent a value and error in example
1 parent c0ec642 commit c1a76bd

File tree

7 files changed

+24
-72
lines changed

7 files changed

+24
-72
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,9 @@
1717
* Retain subcomponent graphs
1818
[Sebastian Shanus](https://github.com/sebastianv1)
1919
[#42](https://github.com/square/Cleanse/issues/42)
20+
21+
#### Improvements
22+
23+
* Replace demo app's ErrorOptional type with Swift Foundation Result type
24+
[Sihao Lu](https://github.com/DJBen)
25+
[#126](https://github.com/square/Cleanse/pull/126)

Examples/CleanseGithubBrowser/CleanseGithubBrowser.xcodeproj/project.pbxproj

+4-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
F69184B31D0DF28A00125872 /* GithubMemberService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69184B21D0DF28A00125872 /* GithubMemberService.swift */; };
1313
F69184B61D0DF2CA00125872 /* GithubRepositoriesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69184B51D0DF2CA00125872 /* GithubRepositoriesService.swift */; };
1414
F69184BB1D0DF3DD00125872 /* NetworkModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69184BA1D0DF3DD00125872 /* NetworkModule.swift */; };
15-
F69184BD1D0DF5DC00125872 /* ErrorOptional.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69184BC1D0DF5DC00125872 /* ErrorOptional.swift */; };
1615
F69184BF1D0DF70F00125872 /* HTTPError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69184BE1D0DF70F00125872 /* HTTPError.swift */; };
1716
F69184C31D0DFB4A00125872 /* GithubServicesModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69184C21D0DFB4A00125872 /* GithubServicesModule.swift */; };
1817
F69184C61D0E015A00125872 /* NSURLSessionAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69184C51D0E015A00125872 /* NSURLSessionAdditions.swift */; };
@@ -107,7 +106,6 @@
107106
F69184B21D0DF28A00125872 /* GithubMemberService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GithubMemberService.swift; sourceTree = "<group>"; };
108107
F69184B51D0DF2CA00125872 /* GithubRepositoriesService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GithubRepositoriesService.swift; sourceTree = "<group>"; };
109108
F69184BA1D0DF3DD00125872 /* NetworkModule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkModule.swift; sourceTree = "<group>"; };
110-
F69184BC1D0DF5DC00125872 /* ErrorOptional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorOptional.swift; sourceTree = "<group>"; };
111109
F69184BE1D0DF70F00125872 /* HTTPError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPError.swift; sourceTree = "<group>"; };
112110
F69184C21D0DFB4A00125872 /* GithubServicesModule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GithubServicesModule.swift; sourceTree = "<group>"; };
113111
F69184C51D0E015A00125872 /* NSURLSessionAdditions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSURLSessionAdditions.swift; sourceTree = "<group>"; };
@@ -164,7 +162,6 @@
164162
F69184B71D0DF32800125872 /* Services */ = {
165163
isa = PBXGroup;
166164
children = (
167-
F69184BC1D0DF5DC00125872 /* ErrorOptional.swift */,
168165
F69184CF1D0E33F600125872 /* FakeModeSettings.swift */,
169166
F69184CD1D0E31F200125872 /* FakeServices.swift */,
170167
F69184B21D0DF28A00125872 /* GithubMemberService.swift */,
@@ -464,7 +461,6 @@
464461
F6E878301D0BD911006F3FAB /* SettingsPage.swift in Sources */,
465462
884618AF1D9324AD0001ADEB /* AppComponent.swift in Sources */,
466463
F6E878321D0D1120006F3FAB /* RepositoriesPage.swift in Sources */,
467-
F69184BD1D0DF5DC00125872 /* ErrorOptional.swift in Sources */,
468464
F6E878381D0DD11A006F3FAB /* SplitViewController.swift in Sources */,
469465
F69184D21D0E357600125872 /* FoundationCommonModule.swift in Sources */,
470466
);
@@ -651,7 +647,7 @@
651647
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
652648
PRODUCT_BUNDLE_IDENTIFIER = com.squareup.CleanseGithubBrowserTests;
653649
PRODUCT_NAME = "$(TARGET_NAME)";
654-
SWIFT_VERSION = 3.0;
650+
SWIFT_VERSION = 5.0;
655651
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CleanseGithubBrowser.app/CleanseGithubBrowser";
656652
};
657653
name = Debug;
@@ -664,7 +660,7 @@
664660
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
665661
PRODUCT_BUNDLE_IDENTIFIER = com.squareup.CleanseGithubBrowserTests;
666662
PRODUCT_NAME = "$(TARGET_NAME)";
667-
SWIFT_VERSION = 3.0;
663+
SWIFT_VERSION = 5.0;
668664
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CleanseGithubBrowser.app/CleanseGithubBrowser";
669665
};
670666
name = Release;
@@ -676,7 +672,7 @@
676672
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
677673
PRODUCT_BUNDLE_IDENTIFIER = com.squareup.CleanseGithubBrowserUITests;
678674
PRODUCT_NAME = "$(TARGET_NAME)";
679-
SWIFT_VERSION = 3.0;
675+
SWIFT_VERSION = 5.0;
680676
TEST_TARGET_NAME = CleanseGithubBrowser;
681677
};
682678
name = Debug;
@@ -688,7 +684,7 @@
688684
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
689685
PRODUCT_BUNDLE_IDENTIFIER = com.squareup.CleanseGithubBrowserUITests;
690686
PRODUCT_NAME = "$(TARGET_NAME)";
691-
SWIFT_VERSION = 3.0;
687+
SWIFT_VERSION = 5.0;
692688
TEST_TARGET_NAME = CleanseGithubBrowser;
693689
};
694690
name = Release;

Examples/CleanseGithubBrowser/CleanseGithubBrowser/ErrorOptional.swift

-50
This file was deleted.

Examples/CleanseGithubBrowser/CleanseGithubBrowser/FakeServices.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ struct FakeGithubServicesModule : GithubServicesModule {
3636

3737

3838
struct FakeGithubMembersService : GithubMembersService {
39-
func list(handler: @escaping (ErrorOptional<[GithubMember]>) -> Void) {
39+
func list(handler: @escaping (Result<[GithubMember], Error>) -> Void) {
4040
DispatchQueue.main.async() {
41-
handler(.init([
41+
handler(.success([
4242
GithubMember(login: "abrons"),
4343
GithubMember(login: "mikelikespie"),
4444
GithubMember(login: "holmes"),
@@ -48,9 +48,9 @@ struct FakeGithubMembersService : GithubMembersService {
4848
}
4949

5050
struct FakeGithubRepositoriesService : GithubRepositoriesService {
51-
func list(_ handler: @escaping (ErrorOptional<[GithubRepository]>) -> Void) {
51+
func list(_ handler: @escaping (Result<[GithubRepository], Error>) -> Void) {
5252
DispatchQueue.main.async() {
53-
handler(.init([
53+
handler(.success([
5454
GithubRepository(name: "okhttp", watchersCount: 11_917),
5555
GithubRepository(name: "cleanse", watchersCount: 42)
5656
]))

Examples/CleanseGithubBrowser/CleanseGithubBrowser/GithubMemberService.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ struct GithubMember {
2020

2121
/// Service that lists "Member" for the current organization
2222
protocol GithubMembersService {
23-
func list(handler: @escaping (ErrorOptional<[GithubMember]>) -> Void)
23+
func list(handler: @escaping (Result<[GithubMember], Error>) -> Void)
2424
}
2525

2626
struct GithubMembersServiceImpl : GithubMembersService {
@@ -30,7 +30,7 @@ struct GithubMembersServiceImpl : GithubMembersService {
3030
let urlSession: URLSession
3131

3232
/// Lists members of an organization
33-
func list(handler: @escaping (ErrorOptional<[GithubMember]>) -> Void) {
33+
func list(handler: @escaping (Result<[GithubMember], Error>) -> Void) {
3434
urlSession.jsonListTask(
3535
baseURL: githubURL.get(),
3636
pathComponents: "orgs", githubOrganizationName.get(), "public_members") { result in

Examples/CleanseGithubBrowser/CleanseGithubBrowser/GithubRepositoriesService.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ struct GithubRepository {
2323

2424
/// Service that lists repositories for the current user
2525
protocol GithubRepositoriesService {
26-
func list(_ handler: @escaping (ErrorOptional<[GithubRepository]>) -> Void)
26+
func list(_ handler: @escaping (Result<[GithubRepository], Error>) -> Void)
2727
}
2828

2929
struct GithubRepositoriesServiceImpl : GithubRepositoriesService {
@@ -32,7 +32,7 @@ struct GithubRepositoriesServiceImpl : GithubRepositoriesService {
3232

3333
let urlSession: URLSession
3434

35-
func list(_ handler: @escaping (ErrorOptional<[GithubRepository]>) -> Void) {
35+
func list(_ handler: @escaping (Result<[GithubRepository], Error>) -> Void) {
3636
urlSession.jsonListTask(
3737
baseURL: githubURL.get(),
3838
pathComponents: "users", githubOrganizationName.get(), "repos",

Examples/CleanseGithubBrowser/CleanseGithubBrowser/NSURLSessionAdditions.swift

+6-6
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,22 @@ import Foundation
1010

1111

1212
extension URLSession {
13-
func jsonTask(baseURL: URL, pathComponents: String..., resultHandler: @escaping (ErrorOptional<Any>) -> Void) -> URLSessionDataTask {
13+
func jsonTask(baseURL: URL, pathComponents: String..., resultHandler: @escaping (Result<Any, Error>) -> Void) -> URLSessionDataTask {
1414
let url = baseURL.appendingPathComponent(pathComponents.joined(separator: "/"))
1515
return jsonTask(url: url as URL, resultHandler: resultHandler)
1616
}
1717

18-
private func jsonTask(url: URL, resultHandler: @escaping (ErrorOptional<Any>) -> Void) -> URLSessionDataTask {
18+
private func jsonTask(url: URL, resultHandler: @escaping (Result<Any, Error>) -> Void) -> URLSessionDataTask {
1919
let task = self.dataTask(with: url as URL) { (data, response, error) in
2020
if let error: Error = error ?? HTTPError(statusCode: (response as! HTTPURLResponse).statusCode) {
21-
resultHandler(ErrorOptional(error))
21+
resultHandler(.failure(error))
2222
return
2323
}
2424

2525
do {
26-
try resultHandler(ErrorOptional(JSONSerialization.jsonObject(with: data!, options: [])))
26+
try resultHandler(.success(JSONSerialization.jsonObject(with: data!, options: [])))
2727
} catch let e {
28-
resultHandler(ErrorOptional(e))
28+
resultHandler(.failure(e))
2929
return
3030
}
3131
}
@@ -39,7 +39,7 @@ extension URLSession {
3939
baseURL: URL,
4040
pathComponents: String...,
4141
query: String? = nil,
42-
resultHandler: @escaping (ErrorOptional<[[String: AnyObject]]>) -> Void
42+
resultHandler: @escaping (Result<[[String: AnyObject]], Error>) -> Void
4343
) -> URLSessionDataTask {
4444
var url = baseURL.appendingPathComponent(pathComponents.joined(separator: "/"))
4545

0 commit comments

Comments
 (0)