zoukankan      html  css  js  c++  java
  • Swift3.0之获取设备识别号deviceNo和保存账户AccountId

      最近在使用最新的Swift3.0重写以前写的一个Objective-C语言编写的众驾租车的app,在重写过程中,遇到了一些问题,但更多的是收获。

      在调用本地接口文档过程中,由于接口参数中频发你使用DeviceNo和AccountId这两个参数,而DeviceNo只获取一次就保存到本地,AccountId在用户登录后拿到也会保存到本地,所以本文主要讲解这两个变量的保存函数。

      本文的DeviceNo和AccountId变量都以String的类型存储,持久化方案采用系统自带的UserDefaults。

     

      首先介绍DeviceNo的获取和保存操作,先看代码:

        static func deviceNo() -> String {
            ///设备识别号存储的key值
            let deviceNoKey = "DeviceNoKey"
            if let deviceNo = UserDefaults.standard.string(forKey: deviceNoKey) {
                return deviceNo
            }
            var deviceNoString: String
            let puuid = CFUUIDCreate(nil);
            let uuidString = CFUUIDCreateString(nil, puuid);
            deviceNoString = CFStringCreateCopy(nil, uuidString!) as String;
            UserDefaults.standard.set(deviceNoString, forKey: deviceNoKey)
            return deviceNoString
        }
    

      首先检查UserDefaults中有没有相应key值的变量,有就返回,没有就重新生成。

     

      然后是AccountId,由于AccountId比DeviceNo多了一步设置,并且该变量是可读可写的,不像DeviceNo,获取之后就不再修改

        static func accountId(setAs accountId: String? = "") -> String? {
            ///账户id存储的key值
            let accountIdKey = "AccountIdKey"
            guard accountId != nil else {  //传入nil
                UserDefaults.standard.removeObject(forKey: accountIdKey)
                return nil
            }
            guard accountId! != ("") else {  //未传参或传入""
                return UserDefaults.standard.string(forKey: accountIdKey)
            }
            UserDefaults.standard.set(accountId!, forKey: accountIdKey)
            return accountId!
        }
    

     

       AccountId就相对复杂一点,功能逻辑如下:

      函数有默认值,若不传入参数,则表示直接返回本地存储的key值,本地没有就返回nil;

      若传入非空字符串,则表示将入参存入本地或替换,并返回该值;

      若传入nil,则表示将本地key值移除(若存在),并返回nil。

      需要注意的是,为了代码的可读性,若传入参数,则外部参数名变为setAs,意为将accountId设置为“ ”,调用就变成了这样:TRHttpParam.accountId(setAs: <#T##String?#>)

      经测试证明,可统一使用该函数进行AccountId的设置、存储和移除,对于真实项目来说该函数还是相当好用的。

  • 相关阅读:
    页面 分页加载图文 微服务架构
    二阶段 三阶段 提交 Paxos
    SignatureDoesNotMatch REST接口 在任何时间、任何地点、任何互联网设备上 在Header中包含签名
    tmp
    base64 hash sha
    对云资源服务商资源读写的架构思考:前端代码走token
    微信小程序存放视频文件到阿里云用到算法js脚本文件
    REST RPC HTTP vs 高性能二进制协议 序列化和通信协议
    角色 演员
    服务端签名后直传 服务端签名直传并设置上传回调
  • 原文地址:https://www.cnblogs.com/keqipu/p/6610247.html
Copyright © 2011-2022 走看看