壹拾肆

有些安排是多余的 这片空旷对我有益

注意到工程里面关于权限请求这块的逻辑没有很好地管理起来,一些是用 OC 的工具类,一些是用 Swift 代码在一些 ViewController 里面单独调用,不能复用,就想封装一个 Swift 版关于权限请求的工具类,虽然这个需求在 GitHub 上搜索也有很多现成的轮子,但使用起来感觉太重,而且有些久不维护,Swift 版本更新的又快,有些接口就不好使了,索性就自己封装一个。

一开始的思路也是想通过枚举来创建不同权限字段,通过静态方法来实现请求,但是蓝牙权限和定位权限需要实例化对象,设置代理。当使用 static 关键字来创建蓝牙和定位对象,当应用内有其他的业务也要使用蓝牙和定位对象时,代理响应就会有点问题。后面索性就用单例方法创建一个整体的权限管理对象,然后创建类方法,在类方法中自己调用自己。

阅读全文 »

看科幻小说常常会感到一种作为人类的自卑感,对于宇宙来说,我们只是其中数以亿计星球中的一个,即使拥有灿烂的文化和恢弘的历史,也一粒尘埃反射出的微弱光芒。

而作为个体,虽然每个人都有自己引以为傲的事情,经历过的人和事、在事件中的感受,我们也因为这些而变得与众不同。然而目光宇宙,时间、空间,都能比量出我们的不值一提。甚至可能只是一场灾难,我们日常曾以为很深刻的痛苦也会立马失去他原来的分量。

阅读全文 »

一、背景

迭代项目的时候碰到一个问题, 原因是负责的内容有一项是封装各大 AI 开放平台的 SDK 集成到一个 SDK 里,然后输出统一的接口,目的是为了可以在不同的 AI 中快速切换并使用。但由于之前输出给了兄弟公司使用,他们在一个音乐 SDK 中用语音 SDK 实现语音点歌的功能。然后当我的主应用同时使用两个 SDK 时,由于音乐 SDK 中实现了语音 SDK 的代理,所以我在上层再初始化语音 SDK 设置代理就不起作用。

阅读全文 »

  最近在优化一个项目的过程,过程中发现之前开发时由于刚接触 Swift 的原因,在 Swift 中的类里使用了很多 OC 的写法,比如字典数组对象会习惯性用 NSDictionaryNSArray来初始化,而不是用 [KeyType: ValueType]() 或是 [SomeType]() 这种类型来实例化变量。虽然在使用上没有什么问题,但看起来多少有点。。。不优雅。
  当我把大部分类型都修改成 Swift 中的写法后(部分未修改是因为使用 String 类型来给文本做截取和富文本定义,实在不如 NSString 顺手,这种不顺手让我不由想起 Stack Overflow 上看到的一个评论:I thougt i already getting along well with Swift.)发现,原来一些变量是否为空的判断中,使用 Swift 里的 optional 类型会方便很多。
  比如解析一个 json 数据,如果层级多而且里面每个元素都是不确定的,那么可能就需要每个层级都判一次空。而如果使用 ? 来设置当前对象为可选值,只需要在最后一层实际使用到对象值时,判一次空就 OK 了。
  对于 ? 和 ! 的区别和总结,网上有很多文章,在这里就不重复造轮子了。下面就对这个 optional 的自己两个疑问做个记录。   

? 和 ! 是表示两种不同的类型吗,一种是可以为空,一种不可以为空?

阅读全文 »