# 老司机 iOS 周报 #126 | 2020-08-31

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## WWDC20

本周在周报公众号上我们推送了 3 篇 WWDC20 内参专栏内的文章，每篇都很精彩！

- [当 Widget 遇到智能化](https://mp.weixin.qq.com/s/jcZ7xJdxdLeKZRSwurc6mQ)
- [让 Objective-C 框架与 Swift 友好共存的秘籍](https://mp.weixin.qq.com/s/hPmL2fsAfQ-moeM5TjsliQ)
- [了解 Swift 中的数值计算](https://mp.weixin.qq.com/s/CI46VcJjm_WGQadJ8q4yIg)

## 新手推荐

### 🐕 [Designing Custom UICollectionViewListCell in Interface Builder](https://swiftsenpai.com/development/custom-uicollectionviewlistcell-in-ib/)

[@水水](https://www.xuyanlan.com): 此前作者发布了 [UICollectionView List with Custom Cell and Custom Configuration](https://swiftsenpai.com/development/uicollectionview-list-custom-cell/) 一文，文中作者教你使用代码自定义 UICollectionViewList 和 Cell，而本文作者又手把手教你如何在 Interface Builder 中自定义 UICollectionViewListCell。对于新手朋友来说这两种方式都有必要掌握，感兴趣的读者可以进行尝试哦~

## 文章

### 🌟 🐕 [Ex1. CocoaPods 中的 Ruby 特性之 Mix-in](https://mp.weixin.qq.com/s/uZx4cgbsNgE2iuguAOzbow)

[@JonyFang](https://github.com/JonyFang)：本文从 CocoaPods 中用到的 Ruby 语法特性说起，讲述了 Ruby 中为了解决多继承问题而引入的 Mix-in 模式，并且 Ruby 也为其定义了 `module` 和 `include` 关键词的语法糖。

可以带着这几个问题来看这篇文章：
- 什么是 Mix-in，它与多继承是什么关系？
- Mix-in 在大多数编程语言中是如何落地的？（可以说说 Swift 中的应用）
- 多继承的缺点有什么？
- 在 CocoaPods 中是如何使用 Mix-in 特性的？

文中最后引入了 Duck Tying 程序设计思想，有兴趣可以自行研究。

### 🌟 🐕 [React Native 升级指南](https://supercodepower.com/docs/react-native-upgrade/index)

[@looping](https://github.com/looping)：React Native 作为一款跨端框架，有一个最让人头疼的问题，那就是版本更新。类库升级最关键的一步就是配置文件的更新，确保能正常通过编译。所以本文一开始就介绍了各端项目配置的技术细节，同时还分享了自己的升级流程，并提供了 0.60 到 0.62 三个版本的升级记录做参考。相信有了这份资料的指导，对有计划升级 RN 的团队来说想必会有很大帮助的。

### 🐕 [Entry Points in Swift: How @main and @UIApplicationMain work internally](https://swiftrocks.com/entry-points-swift-uiapplicationmain-main)

[@EyreFree](https://github.com/EyreFree)：本文介绍了 Swift 如何确定应用程序的入口点，在分析 @main 与 @UIApplicationMain 的作用原理的过程中也概括了苹果如此设计的初衷。

### 🐎 [SVG image assets supported in Xcode 12](https://sarunw.com/posts/svg-image-assets-supported-in-xcode12/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：Xcode 12 又带来了一些新特性，我们发现 Assets 已经支持 SVG 资源了，尽管最终 Xcode 还是将 SVG 转换成了 PNG，与多年来为我们服务的 PDF 格式的工作方式相同，但这个更改依然带来了一些附带好处。

### 🐎 [SwiftUI betas - what changed before 1.0](https://mackuba.eu/2020/08/17/swiftui-beta/)

[@Damien](https://github.com/ZengyiMa)：SwiftUI 在 2019 年 WWDC 一经推出就收获了很多开发者的目光，经过一年的演变，在 2020 年的 WWDC 中 SWiftUI 得到了极大的增强。从去年到今年 SWiftUI 都有哪些变化呢？本文总结了从 SwiftUI 1.0 到现在的变化之处。对 SwiftUI 感兴趣的同学不妨一读。

### 🐎 [Sharing layout information in SwiftUI](https://fivestars.blog/swiftui/swiftui-share-layout-information.html)

[@xiaofei86](https://weibo.com/xuyafei86)：SwiftUI 的视图布局取决于每个视图的状态。此状态由内部属性或外部上下文中的值等混合而成。在高级的自定义布局中，有时父视图也需要来自其子视图的直接或间接的信息。一个常见的例子是，父视图需要知道子视图的大小。在本文中，我们将探讨如何通过 PreferenceKey 做到这一点。

## 代码

### 🐎 [Codable + PropertyWrapper = ☕](https://github.com/winddpan/CodableWrapper)

[@zvving](https://github.com/zvving)：Codable 作为 Swift 官方推荐的序列化方案，使用时有不少痛点：

- 自定义映射复杂
- 不支持 DefaultValue
- 类型严格，不支持降级策略：如 Int/Double 降级转换为 String
- 同一属性不支持映射多个 CodingKey

CodableWrapper 尝试解决这些问题，同时通过 PropertyWrapper 提供简洁的实现。库刚刚推出，欢迎交流反馈。

> 来自作者 [winddpan](https://github.com/winddpan) 自荐

## 内推

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

如果你想**找工作**，点这里：https://www.yuque.com/iosalliance/article/bhutav

如果你想**招人**，点这里：https://www.yuque.com/iosalliance/article/ycyhf3

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

## 关注我们

我们开通了公众号，每期发布时公众号（LSJCoding）会推送消息，欢迎关注。

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

🚧 表示需某工具，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
