Comments (3)
Oh, yes. I leave this to indicate common errors. This may be useful when user don't define their custom errors. Users can also throw their custom error, so they can choose type of errors to throw.
from apikit.
I got your intention.
So, which is better way when user throws the error?
- uses defined ErrorType as possible.
- defines their own ErrorType as they like.
If 1), I prefer associated errors of SessionTaskError
to belong to each NSError
, RequestError
and ResponseError
type.
If 2), pre-defined but unused UnexpectedURLRequest
seems confusing. And RequestError
and ResponseError
suit rather Struct type than Enum type.
And in any case, what do you think of specify protocols for associated ErrorTypes in SessionTaskError
? they looks too vague to use.
from apikit.
I think the second one is better.
Generally, several kind of errors might happen while getting web API response. It is impossible to enumerate possible errors exhaustively because there're custom errors, and that is the reason why associated values of SessionTaskType
is untyped.
From the viewpoint of call-site, we can get where the error occurred by the case of SessionTaskError
, but can't get the type of the associated error. We have to cast the error to known error type to get what the error is. Here's an example:
let request = GitHubAPI.SearchRepositoriesRequest(query: "APIKit")
Session.sendRequest(request) { result in
switch result {
case .Success(let response):
print("response: ", response)
case .Failure(let error):
switch error {
case .ResponseError(let gitHubError as GitHubError):
print("GitHub API Error: \(gitHubError.message)")
default:
print("Unknown Error: \(error)")
}
}
}
This is exactly the same way to do-try-catch
, which is untyped error handling model. We can specialize error handling for known error types, but handling unknown errors is unavoidable. In other words, all specializations for known errors are optional, but handling unknown errors is required. Thus, specializations for predefine errors such as RequestError
and ResponseError
are also optional.
from apikit.
Related Issues (20)
- Does JSONBodyParameters support nested json? HOT 1
- 'NSInvalidArgumentException', reason: '*** -propertyForKey: only defined for abstract class HOT 1
- How to send request a nest JSON
- how to make request with body parameters json inside json HOT 1
- JSONBodyParameters - Protect adding extra escapes by JSONSerialization.data HOT 1
- Swift4.2 support HOT 6
- How about using a private queue as default callback queue?
- How to update json in BodyParameters HOT 4
- The specs repo latest version is 4.1.0,not 5.0.0 HOT 2
- [question] Was develop/4.0 branch abandoned? HOT 4
- Executing multipart request on same Part instance can cause waiting reading eternally
- Enable Swift 5.1's module stability
- [Q] `xcodebuild` with Swift Package Failed HOT 6
- There is an inconsistency in the PBXGroup references. HOT 1
- how to run Demo.playground? HOT 1
- where to write my common encrypt code
- This library isn't secure by default. It should have the option to set the URLConfiguration to ephemeral.
- Build failed with Xcode14.3
- Swift Concurrency warning
- Any support of Privacy Manifest?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from apikit.