Skip to content

Instantly share code, notes, and snippets.

@mingyeow
Last active June 2, 2018 14:45
Show Gist options
  • Save mingyeow/ef740dd3d70455a84c01 to your computer and use it in GitHub Desktop.
Save mingyeow/ef740dd3d70455a84c01 to your computer and use it in GitHub Desktop.
RxResultHandlerEnum
// DEFINITIONS
enum ResultHandler<T> {
case Success((T) -> Void)
case Empty(() -> Void)
case Failure((T) -> Void)
func run(a:T) {
switch self {
case Success(let completion):
completion(a)
case Empty (let completion):
completion()
case Failure(let completion):
completion(a)
}
}
}
// this will be the struct that will recieve
struct FailureReason{
var code:Int!
var message:String!
func description() -> String {
return "Error code \(code): \(message)"
}
}
// CALLER
func testingAtLaunch(){
let successCompletion = ResultHandler<User>.Success({user in
debugPrint(user)
})
let failureCompletion = ResultHandler<FailureReason>.Failure({f in
debugPrint(f.description())
})
ApiClient.sharedInstance.getUser("56cfffce227a6c2c9b000001", successCompletion: successCompletion, failureCompletion: failureCompletion)
}
// API LIBRARY
// gets current user
func getUser(user_id: String?, successCompletion: ResultHandler<User>, failureCompletion:ResultHandler<FailureReason>){
var url: String!
if user_id != nil {
url = "\(currentURL)/users/\(user_id!).json"
} else {
url = "\(currentURL)/users/me"
}
Alamofire.request(.GET,url).responseJSON(
completionHandler: {
response in
switch response.result {
case .Success(let JSON):
if let user = Mapper<User>().map(JSON){
successCompletion.run(user)
}
case .Failure(let error):
let fr = FailureReason(code: response.response?.statusCode, message: error.localizedDescription)
failureCompletion.run(fr)
}
}
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment