Advertisement
Guest User

Untitled

a guest
Oct 16th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.75 KB | None | 0 0
  1. //: Playground - noun: a place where people can play
  2.  
  3. enum APIRequest {
  4.     case userLogin(username: String, password: String)
  5.     case userLoginWithData(username: String, password: String)
  6.     case addPromo(username: String, password: String, code: String)
  7.     func getRawResponse(completion: @escaping ([String:Any]?, Error?) -> Void) {
  8.         let dict = self.serialize()
  9.         // session send dict
  10.         // call completion
  11.     }
  12.     func serialize() -> [String: Any] {
  13.         if case .userLogin(let username, let password) = self {
  14.             return ["username": username, "password": password, "method": "p1"]
  15.         }
  16.         else if case .userLoginWithData(let username, let password) = self {
  17.             return ["username": username, "password": password, "method": "p2"]
  18.         }
  19.         else {
  20.             return [:]
  21.         }
  22.     }
  23.     func getMappedResponse<T>(mapper: @escaping ([String:Any]) -> T?, completion: @escaping (T?, Error?) -> Void) {
  24.         getRawResponse { (rawResponse, error) in
  25.             if let error = error {
  26.                 completion(nil, error)
  27.                 return
  28.             }
  29.             guard let rawResponse = rawResponse else {
  30.                 completion(nil, error)
  31.                 return
  32.             }
  33.             if let mappedResponse = mapper(rawResponse) {
  34.                 completion(mappedResponse, nil)
  35.                 return
  36.             }
  37.             completion(nil, error)
  38.         }
  39.     }
  40. }
  41.  
  42.  
  43. // Usage:
  44.  
  45. class UserModel {
  46.     static func fromDictionary(_ dict: [String:Any]) -> UserModel {
  47.         return UserModel()
  48.     }
  49. }
  50.  
  51. APIRequest.userLoginWithData(username: "test", password: "test").getMappedResponse(mapper: UserModel.fromDictionary) { (userModel, error) in
  52.    
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement