userManager(实训)

来源:互联网 发布:航空数据查询接口 编辑:程序博客网 时间:2024/06/03 19:44

路由只是相当于将那些请求区分然后把他跟要传的参数什么的匹配一下,列好,非常清晰,但是很明显,没有具体的方法实现代码。Router关注的是要发送的请求,就是Alamofire.request()括号里面的,但是真的要发送请求,然后把再对返回的数据进行解析什么的还是要用userManager。还是先贴代码!!

import Foundationimport Alamofireimport UIKitimport SwiftyJSONpublic class UserManager: Notifier {        public static let shared: UserManager = UserManager()        fileprivate let userDefaults = UserDefaults.standard        // MARK: - 用户相关        var isLogIn = false        //手机号    var tel = ""    //密码    private var password = ""    //token    private var token = ""    //昵称    var username = ""    //信用等级    private var creditLevel = ""    //头像    var avatar: UIImage?    //地点    var location = ""        public enum Notification : String {        case didGetMessage        case didGetMessageFailure        case didexists        case didexistsFailure        case didSignup        case didSignupFailure        case didLogin        case didLoginFailure        //        case didLogout        //        case didLogoutFailure        case didGetUserInfo        case didGetUserInfoFailure        case didSetUserInfo        case didSetUserInfoFailure        case didGetUserAvatar        case didGetUserAvatarFailure    }        private enum Action {        //获取验证码        case getMessage        case exists        case signUp        case logIn        case getUserInfo        case setUserInfo        case getAvatar        case getCarInfo    }        private let actionDict: [Action: (Notification, Notification)] =        [.getMessage: (.didGetMessage, .didGetMessageFailure),         .exists: (.didexists, .didexistsFailure),         .signUp: (.didSignup, .didSignupFailure),         .logIn: (.didLogin, .didLoginFailure),         .getUserInfo: (.didGetUserInfo, .didGetUserInfoFailure),         .setUserInfo: (.didSetUserInfo, .didSetUserInfoFailure),         .getAvatar: (.didGetUserAvatar, .didGetUserAvatarFailure)]        private func handleResult(_ action: Action, _ response: DataResponse<Any>, completionHandler: (JSON) -> ()) {        switch response.result {        case .success:            guard let value = response.result.value else {                log("response.result.value is nil", .error)                return            }            let json = JSON(value)            guard let status = json["status"].int else { return }            guard status == 200 else {                log(json, .error)                                let (_, failureNoti) = actionDict[action]!                UserManager.postNotification(failureNoti)                                return            }            let (successNoti, _) = actionDict[action]!            completionHandler(json)            UserManager.postNotification(successNoti)            return        case .failure(let error):            log(error, .error)            let (_, failureNoti) = actionDict[action]!            UserManager.postNotification(failureNoti)            return        }    }        func getMessage(_ phone: String) {        log("send message to \(phone)", .json)        DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: {            UserManager.postNotification(.didGetMessage)        })    }        func exists(tel: String) {        Alamofire.request(Router.exists(tel)).responseJSON { response in            self.handleResult(.exists, response, completionHandler: { (json) in                log(json, .json)            })        }    }        func signup(tel: String, password: String) {        Alamofire.request(Router.signUp(tel, password)).responseJSON { response in            self.handleResult(.signUp, response, completionHandler: { (json) in                log(json, .json)            })        }    }        func login(tel: String, password: String) {        Alamofire.request(Router.logIn(tel, password)).responseJSON { response in            self.handleResult(.logIn, response, completionHandler: { (json) in                log(json, .json)                                self.token = json["data"].string!                log(self.token, .json)                                self.isLogIn = true                self.getUserInfo()                // 用url获得头像                //self.avatar = UIImage(data: <#T##Data#>)                                self.tel = tel                self.password = password                                self.userDefaults.set(true, forKey: "didLogInLastTIme")                self.userDefaults.set(self.tel, forKey: "tel")                self.userDefaults.set(self.password, forKey: "password")                self.userDefaults.synchronize()            })        }    }        func getUserInfo() {        Alamofire.request(Router.getUserInfo()).responseJSON { response in            self.handleResult(.getUserInfo, response, completionHandler: { (json) in                log(json, .json)                self.location = json["result"]["location"].string!                self.username = json["result"]["username"].string!                            })        }    }        func setUserInfo(username: String, location: String) {        Alamofire.request(Router.setUserInfo(username, location)).responseJSON { response in            self.handleResult(.setUserInfo, response, completionHandler: { (json) in                log(json, .json)                            })        }    }        func setUserAvatar() {        Alamofire.request(Router.setUserAvatar()).responseJSON { response in            log(response, .url)//            guard let image = response.result.value as? UIImage else {//                log("convert to image failure", .error)//                log(response, .error)//                self.avatar = UIImage(named: "left_icon_defaultAvatar")//                UserManager.postNotification(.didGetUserAvatarFailure)//                return//            }//            self.avatar = image//            UserManager.postNotification(.didGetUserAvatar)        }    }            func userLogOut(){                isLogIn = false                password = ""        token = ""        username = ""        tel = ""        location = ""        creditLevel = ""        avatar = nil                // 设置上次登录信息        userDefaults.set(false, forKey: "didLogInLastTIme")        userDefaults.set("", forKey: "tel")        userDefaults.set("", forKey: "password")        userDefaults.synchronize()            }        func getToken() -> String {        return self.token    }        func logInWithLastTimeInfo() {        if userDefaults.bool(forKey: "didLogInLastTIme") {            let tel = userDefaults.string(forKey: "tel")            let password = userDefaults.string(forKey: "password")            log(tel, .happy)            log(password, .happy)            self.login(tel: tel!, password: password!)        }    }        
其实看了前面写的Alamofire发网络请求的那一章,应该就没什么不明白的了,也应该能看明白Router跟userManager的关系了。其实这里就是把前面说的用Alamofire发送的网络挪过来了,然后发送的请求,以及发送请求的方式,都用Router封装好了。这样的话,等到我们在登录注册界面编写的时候,就不用再写用Alamofire发送各种手机号什么的参数,或者再解析JSON数据了,直接调用userManager里的相应的方法就行了。