老司机 iOS 周报 #100 | 2020-02-10

2,991 阅读6分钟

老司机 iOS 周报,只为你呈现有价值的信息。

你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 Issues 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 Issues 提出。

新手推荐

🐎 Enumerating elements in ForEach

@looping:本文介绍了如何通过 SwiftUI 的 ForEach 来遍历展示列表,并对列表元素进行编号。作者记录了对这部分代码进行重构优化的整个过程,使用了 key-path-based 写法让代码变得清晰易懂,是一份不错的学习优化代码的材料。

🐎 iOS中编写高效能结构体的7个要点

@极速男孩:本文通过介绍在内存中一个结构体是如何被存放和使用的,来介绍在 iOS 中定义一个结构体有哪些需要注意的地方。

文章

🌟🐕2019年终总结

@含笑饮砒霜:一篇迟来的年终总结,作者从5个方面概括了自己一年的收益和变化:

  • 技术&职场
  • 投资
  • 读书
  • 生活
  • 2020 展望

读完觉得很受触动,时间对每个人都是有限的,但是每个人用来做的事却不尽相同。作为技术人员,在技术道路上不断前进之外,似乎也有必要在其他方向上多有涉猎,这是个见仁见智的问题。相信各位读者会有自己的感受体会。

🌟🐕🚧 用 struct 还是 class?让 Swift-NIO 的开发者来告诉你

@五子棋:稍微了解 Swift 的同学都知道 Swift Community 比较推崇使用 Struct,因为它是一种值语义,可以确保你的程序不会被各种 Side Effect 造成奇怪的影响。但本文的作者在开发 SwiftNIO 的时候发现在函数传参数的过程中 Struct 类型参数的性能要慢于 Class 类型,因此就深入研究了一番。同时,作者提出了一种 Struct 中嵌套 Class 并配合 COW 方式的设计,既能提升性能,又能维持值语义,是一篇适合 Swift 开发者的佳作。

🐕 @

@EyreFree:Mattt 大神新作,以新手入门的视角列举并介绍了 Objective-C 中 @ 符号开头的一系列指令,同时对它们的设计哲学做了简单描述(顺便黑了一下 Lisp)。

参考:中文翻译链接

🌟🐕 Binary Frameworks in Swift

@四娘:PSPDFKit 从一个服务商的角度介绍了 Swift 二进制 SDK 分发的细节,包括了 ABI 稳定的含义和开发内容,以时间线的形式给我们介绍了整个开发过程。

🌟🐢 为什么 SwiftPM 的开发进度比 Cocoapods 慢那么多?

@享耳先森:CocoaPods 开发者 Orta Therox 写了篇文章分析为什么 SwiftPM 开发速度比 CocoaPods 慢?总的来说,两者所关注的层级不一样:SwiftPM 需要关注全链路的编译,需要支持 Linux 等系统,脱离了 Xcode;而 CocoaPods 是基于 Xcode 之上的,其产物是给 Xcode 用的,只需关注 macOS 平台。

🐎再见,整洁代码(译)

@JimQ:这又是一篇对“代码洁癖者”的“劝你三思”的文章。正如作者文中所说,对“整洁代码”的沉迷、好于“消除重复代码”,是我们大多数开发者都会经历的阶段,但作为开发者不应仅仅关注于“整洁”,还要把一切需要权衡的因素考虑在内,考虑到对团队协作效率的影响,是否能够应付需求变化,以及这种行为对整个工程的影响等等。

🐕 TopLevelEncoder and TopLevelDecoder in Combine

@anotheren:在使用 Codable 这组协议时,你可能会发现已经内置于标准库中的 JSONDecoderPropertyListDecoder 并未遵从于一个统一用于描述顶级解码器的协议,而编解码的起点与结果也并非仅有 Data 这一种而已。于是 Combine 中,为此定义了 TopLevelDecoderTopLevelEncoder 协议来统一描述顶级的编解码器。本文以实际案例出发,简述了这组协议存在的缘由。在 Swift 未来的某一个版本中,它们会以不破坏 ABI 稳定的方式加入标准库。

代码

Barber

@老驴:此 framework 用了点投机取巧的方式来加快项目开发中增量编译的速度问题,基本思路是去掉 AppDelegate,转而为每一个大 ViewController 各自建立自己的 dependency,这样在针对某个 ViewController 做开发的时候,可以避免小改动就导致全部重新编译的情况。

其实个人并不是很推荐在正儿八经的项目中使用这样的 framework,不过,这样的思路倒是可以参考一下。

Pure-Swift-UI

@AidenRao:PureSwiftUI 是一个辅助 SwiftUI 的工具类,用于优化编写 SwiftUI 的体验。

  • 删除了大量的显示参数,通过更能表达含义的接口,将参数配置组合起来,使代码结构更清晰。
  • 只要你的变量是 Int,Double,Float,或者 CGFloat,PureSwiftUI 上都能混合着使用。
  • 通过修改 geometryReader 的备份 GeometryProxy,可以不影响 geometryReader 布局。
  • offsetToPosition 修饰符,可以将 View 的位置设置为任何坐标空间内的绝对位置。
  • 条件修饰符替代三目运算符,根据状态有条件地对视图进行样式配置。
  • SF Symbols 使用常量,替代字符串调用。

内推

回响科技招人啦,求简历:

  • 回响科技研发中心长期招聘 iOS 开发工程师、Android 开发工程师、Go 开发工程师/架构师、前端开发工程师,另有产品、运营、销售等非技术部门职位也欢迎投递!
  • 坐标上海,主营业务为潮流文化产品交易平台&社区,团队技术氛围良好,对新技术接受程度高,对各类能够提升团队开发效率的工具/方法持开放态度。
  • 简历以【姓名+投递岗位+手机号】格式发送至 eyrefree@eyrefree.org 或者直接加微信 EyreFree

老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。

如果你想找工作,点这里:www.yuque.com/iosalliance…

如果你想招人,点这里:www.yuque.com/iosalliance…

当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。

关注我们

我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。

同时也支持了 RSS 订阅:github.com/SwiftOldDri…

说明

🚧 表示需翻墙,🌟 表示编辑推荐

预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins)