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里的相应的方法就行了。
阅读全文
0 0
- userManager(实训)
- UserManager
- C#三层架构的UserManager类(注册登录使用)
- 存档UserManager
- soaplib之usermanager
- Mongodb3.0 UserManager
- 模仿struts:UserManager(业务层)
- 模仿struts改进版:UserManager(业务层)
- 用mvc5的UserManager管理用户信息
- Write my own UserManager on Android
- [Android 5.1] 多用户管理UserManager相关整理
- Android UserManager: Check if user is owner (admin)
- Controller的构造函数使用UserManager.FindById(User.Identity.GetUserId())导致错误的处理
- 解决EJB本地调用“java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager”异常
- ASP.NET Identity V2在多线程中UserManager获取的httpContext.Current始终为null的解决办法
- 一例应用Microsoft.AspNet.Identity初始化角色权限导致的UserManager.GetRoles(user.Id)始终获取不到账号角色问题的解决
- linux实训(day_1)
- 细节页面(实训)
- bzoj 3532: [Sdoi2014]Lis 构造字典序最小割
- Volley传输网络数据
- Threading (C#)
- src/main/resources和WEB-INF
- Spring 申明式事务之注解
- userManager(实训)
- 统计 | 统计功效 | R语言
- java面向对象
- 文章标题
- java实现压缩图片的方法
- Android O 行为变更
- 大数据-十三
- 订单未支付N小时后取消订单库存回滚
- iOS-NSArray