Last active
June 2, 2018 14:45
-
-
Save mingyeow/ef740dd3d70455a84c01 to your computer and use it in GitHub Desktop.
RxResultHandlerEnum
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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