内容简介:从 XCode 9 开始,我们可以在工程中创建 named color,并在代码或 Storyboard 中使用。要创建 named color,只需要进入 Assets.xcassets 中,点击右键,出现图 1 的菜单,选择 New Color Set,然后编辑 named color 的名称和色值等信息,如图 2 所示。在代码中,我们可以直接使用 UIColor(name: "Test")来使用,如图 3 所示。
从 XCode 9 开始,我们可以在工程中创建 named color,并在代码或 Storyboard 中使用。要创建 named color,只需要进入 Assets.xcassets 中,点击右键,出现图 1 的菜单,选择 New Color Set,
然后编辑 named color 的名称和色值等信息,如图 2 所示。
在代码中,我们可以直接使用 UIColor(name: "Test")来使用,如图 3 所示。
Diff:/Podfile.lock NO such file or directory
作者:Lefe_x
当 Pod install
后,运行项目后发现报错,错误提示如图所示。按提示看了下 Podfile.lock
是存在的。试了各种办法,都没有解决(删除 pods 文件夹,重新安装,都不好使)。无奈之下,看了下文件的路径。发现文件路径错了, XXX/Pods/Pods/Target Support Files/xxx
,发现文件路径多了个 Pods
。这个路径我并没有设置,是 Pod 自己管理的。最后发现在下图的位置中可以配置路径,把这个路径修改成正确的地址就可以了:
iOS 中的 GZIP 压缩
作者:这个汤圆没有馅
当项目中与后端接口交互涉及到大量数据信息的时候,为了提升响应速度需要对传输的数据进行压缩,压缩成功后将 data 转化为 string 传给服务器。
关于 iOS 端的 GZIP 压缩,这是我目前在 github 上找到的 star 数最多的一个:t.cn/RUBP1Le
GZIP 支持 cocoapods,如果手动导入的话,记得在 Targets--Build Phases--Link Binary With Libraries
中添加 libz.1.2.5.tbd。
模拟一万条简单的数据,看看压缩前后数据大小变化。如下图。
经过 GZIP 压缩后,字节量缩小幅度很大。但是压缩后的 data 是无法通过 - (nullable instancetype)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
这个方法得到string的。
这个时候我们再来看 java 中对于压缩的数据是如何解压缩的,java 代码如下图。
其中有一行代码为
byte[] compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr); 复制代码
说明 java 是对 base64 的string 进行解压缩的,也就是说我们在进行 data 压缩后,需要传 base64 的string 给服务器。那么只需要加一行代码
[zipData base64EncodedStringWithOptions:0]; 复制代码
使用 CaseIterable 获取枚举的所有 case
在写 Swift 代码时,可能需要获取枚举的所有 case,在之前的版本中,我们可能需要自己来实现一个静态方法 allCases,如下代码所示:
enum CompassDirection { case north, south, east, west static let allCases = [north, south, east, west] } 复制代码
而在 Swift 4.2 中,标准库为我们提供了 CaseIterable 协议,可以实现这个需求,如下代码所示:
enum CompassDirection: CaseIterable { case north, south, east, west } print("There are \(CompassDirection.allCases.count) directions.") // Prints "There are 4 directions." let caseList = CompassDirection.allCases .map({ "\($0)" }) .joined(separator: ", ") // caseList == "north, south, east, west" 复制代码
实现 CaseIterable 的枚举在编译器会自动合成 allCases 方法,且 allCases 数组中的元素按 case 声明的顺序。不过如果枚举中的关联值或者 @available 属性,则需要自己重写 allCases,如下代码所示:
enum CompassDirection: CaseIterable { case north, south, east case west(Int) static var allCases: [CompassDirection] { return [north, south, east, west(0)] } } print("There are \(CompassDirection.allCases.count) directions.") // Prints "There are 4 directions." let caseList = CompassDirection.allCases .map({ "\($0)" }) .joined(separator: ", ") // caseList == "north, south, east, west(0)" 复制代码
不可或缺的背景色
作者:Vong_HUST
最近遇到两个和背景色有关的坑,和大家一起分享下。第一个页面 A push到页面 B 时,会莫名卡顿。一开始还以为是代码里有耗时操作,然后就一行行屏蔽,屏蔽到什么代码都没有了,还是会卡顿,现在大概就如下图所示。
觉得不可思议,因为 push 到其它页面都不会发生这种情况,最后比对代码发现,其它页面比 B 页面唯一多的一个操作就是设置了 vc.view.background,只要设置了背景色不为 nil 且不为 [UIColor clearColor],就不会出现图中的卡顿感。
另外一种情况就是,如果 collectionView 和 vc.view 背景色都是 nil 或者 clearColor,会出现一种现象就是 collectionView 只能响应有内容区域的点击事件,比如一个 (0, 0, 100, 100) 的 cell 上有一个 (0, 0, 20, 100)的 button,则只有按钮区域是能点击响应事件,其它空白区域(20, 0, 80, 100)的区域点击是不会触发 didSelect 回调的,一旦设置了 vc.view 的背景色,就会恢复正常。
以上两种现象都是由于背景色没有处理妥当,导致页面卡顿或无法响应事件,只要设置了背景色,即可恢复。具体原因还不清楚,有知道的老哥们可以在评论中指点一波~
注:提拉拉拉就是技术宅 大大对此的解释是:不是卡顿,动画本来就是这样子的,后面的vc只推过去一点点。我曾经做过一个app,背景是spritekit的特效,然后整个app 所有vc 都是模态窗口盖在特效上面,背景颜色全部都是clear ,push的动画本身就是这个样子的。
以上所述就是小编给大家介绍的《「 iOS知识小集 」2018 · 第 42 期》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 肖仰华谈知识图谱:知识将比数据更重要,得知识者得天下
- 基础知识:css3核心知识整理
- 从知识工程到知识图谱全面回顾 | AI&Society
- 知识图谱发展的难点&构建行业知识图谱的重要性
- 《面试知识,工作可待:集合篇》:Java 集合面试知识大全
- 第四期知识与认知图谱:神经机器翻译也应该嵌入「知识」
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python高级编程(第二版)
[波兰] Michał Jaworski、[法] Tarek Ziadé / 张亮、阿信 / 人民邮电出版社 / 2017-9-19 / 89.00元
Python作为一种高级程序设计语言,凭借其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言之一。 本书基于Python 3.5版本进行讲解,通过13章的内容,深度揭示了Python编程的高级技巧。本书从Python语言及其社区的现状开始介绍,对Python语法、命名规则、Python包的编写、部署代码、扩展程序开发、管理代码、文档编写、测试开发、代码优化、并发编程、设计模式等重要话题......一起来看看 《Python高级编程(第二版)》 这本书的介绍吧!