博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift3.0之获取设备识别号deviceNo和保存账户AccountId
阅读量:6787 次
发布时间:2019-06-26

本文共 1753 字,大约阅读时间需要 5 分钟。

  最近在使用最新的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的设置、存储和移除,对于真实项目来说该函数还是相当好用的。

转载于:https://www.cnblogs.com/keqipu/p/6610247.html

你可能感兴趣的文章
linux Shell 中常用的条件判断
查看>>
angular 动态设置blob链接给 ng-href时遇到unsafe 解决方案
查看>>
Java与Highcharts实例(四) - Hello Highcharts (后台Java传递数
查看>>
连接数据库的操作 总结
查看>>
Android 小米手机开发APP图标更换后还显示原来的图标
查看>>
在代码中修改Shape的solid属性的color值
查看>>
MySQL字符集问题
查看>>
Java多线程总结
查看>>
iPad Mini外屏碎了 换屏幕教程
查看>>
LinkedBlockingQueue操作,线程安全问题,ConcurrentModificationException 异常分析与解决方案...
查看>>
redis3.2新功能--GEO地理位置命令介绍与实战开发
查看>>
java 通过ssh 执行命令
查看>>
算法导论——基数排序(基于计数排序)
查看>>
19.TCP的交互数据流
查看>>
字符串匹配的Boyer-Moore算法
查看>>
memcached数据库未授权访问漏洞解决
查看>>
centos 7 安装在vmware Workstation的网卡问题 RHEL7
查看>>
嵌入式开发平台-iTOP-4418开发板
查看>>
我的友情链接
查看>>
ssh配置公钥私钥(key)登录SecureCRT
查看>>