# 老司机 iOS 周报 #13 | 2018-04-02

![ios-weekly](../assets/ios-weekly.png)

欢迎第 12 位编辑 [@aaaron7](https://weibo.com/aaaron7) 加入。

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

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

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

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

## 新闻

### [苹果新品发布会](https://sspai.com/post/43858)

苹果进行了一场没有直播的发布会。发布了支持 Apple Pencil 的 9.7 寸 iPad，芯片升级为 A10 Fusion，较上代在 CPU 性能提升了 40%，在图形运算提升了 50%。32GB 价格由 2688 降至 2588。

除此之外，苹果还更新了一系列服务：iWork 三件套加入了「智能注解」功能、用于教学的 AR 应用以及免费的「人人能创造」课程和「课业」应用。为在校师生提供更好的授课和学习体验。

### [iOS 11.3 正式发布](https://www.apple.com/cn/newsroom/2018/03/ios-11-3-is-available-today/)

iOS 11.3 正式发布，针对之前的「降频门」事件，11.3 可在 “设置”->“电池” 中查看电池效能并关闭「电源管理」功能。
One more thing， 北京、上海地区用户还有专有福利，可用 Apple Pay 绑定「交通卡」，此功能与广州、杭州等地目前的 Apple Pay 支付不同，使用 NFC，刷卡时候不用「刷脸」了。

### [iOS 11.3 支持 PWA](https://mp.weixin.qq.com/s/BiAYM-Ia5lYf0qv3DHmPjg)

随着 iOS 11.3 的发布，苹果悄悄的支持了 PWA 理念背后的几种新技术：Service Worker，Web App Manifest。通过 PWA 现在可以不用通过 App Store 在 iOS 上安装应用了。但是 iOS 上的 PWA 还是有诸多额外的限制：最多 50Mb 的离线数据和文件；无法在后台执行代码；没有消息推送，没有 Siri 集成等。

PWA 在 iOS 上的能力还是差 Native app 很多，谈取代就想多了。看做 web 能力的延伸和扩展我想才是正确的认知。

### [区块链游戏，其实也没什么神秘的](http://www.cocoachina.com/blockchain/20180327/22792.html)

Cocos2d-x 宣布开发基于区块链的游戏引擎，提供 SDK 供游戏厂商接入，给现在火爆的区块链圈子又多了一种应用形态。大部分游戏都有自己的金币货币与金融交易体系，发币与交易在游戏里是一个很自然并且有意义的事情，而区块链技术能给现在的游戏价值体系解决了一些问题。一，跨游戏之间的金币流通。二，玩家点对点去中心化的可信道具交易。三，智能合约防止游戏公司，增发减发随意调控游戏物价。

### [Swift for TensorFlow](https://www.tensorflow.org/community/swift)

TensorFlow 社区在 TensorFlow Dev Summit 2018 上宣布将于四月开源 Swift for TensorFlow 项目。

### [Integrating ClassKit into Your App](https://developer.apple.com/classkit/)

Xcode 9.3 带来了 ClassKit 框架，与全新的、强大的 iPad app Schoolwork 配合，帮助教师和学生追踪作业和进度。借助 ClassKit，教师可以轻易查看 app 中的特定学习活动，点击一下就可以直接带学生们进入该活动。此外还会与教师安全、私密地共享进度数据，以帮助教师进行个性化教学。

## 文章

### 🐕 [Swift 4.1 新特性概览](https://mp.weixin.qq.com/s/2PNE2yPIiyn4y-cqHZgWiQ)

这周 Swift 4.1 伴随着 Xcode 9.3 一起发布了，没有破坏性的 API 修改，大幅优化编译速度，并且还加入了几个实用的小功能，知识小集在这篇文章里给我们深入介绍了新增的特性，强烈推荐大家在代码迁移之前过一遍这篇文章！！！

### 🐢 🌟 🚧 [Everything about public and private Swift attributes](https://theswiftdev.com/2018/03/29/everything-about-public-and-private-swift-attributes/)

经常写 Swift 你是不是都会有这样的感受，每次遇到一些不明所以的 warning 总是可以靠一些 `@` 开头的修饰符搞定。比如可能是最常用的 `@objc`，或者是闭包伴侣 `@escaping`，这篇文章非常全面的介绍了 Swift 的这一类公有属性修饰符（public attribute）的用法，可以帮助你获得一个全面的认识。

不仅如此，文章后半部分还介绍了一些私有属性修饰符（private attribute），比如起到类似 `pch` 头文件作用的 `@_exported` 以及指定函数是否可以被看做是原子操作的 `@_transparent`。私有属性修饰符绝大多数都和编译过程中的优化策略选择有关，虽然可能日常开发中用不到，但很适合对 Swift 语言本身有兴趣的读者深入研究。

### 🐢 🌟 🚧 [Best iOS hacks from Twitter: January & February Edition](http://pxlme.me/CoLJrysj)

1 月 和 2 月 twitter 上收集的各种小技巧。五花八门，总有几条击中你。

### 🐢 🌟 [Pragmatic iOS app architecture](https://medium.com/@martinmitrevski/pragmatic-ios-app-architecture-f7d6334fd8e4)

文章从多个角度评估一种架构是否适合你的项目，并从经典的 `MVC` 一路引申到 `RXSwift`、`MVVM`、`VIPER`，值得细读。

### 🐕 [What 2018 has in store for Swift](https://www.hackingwithswift.com/articles/62/what-2018-has-in-store-for-swift)

文如其名，本篇文章重点讲述了在2018年即将到来的 Swift 4.2 和 Swift 5.0 有哪些激动人心的新特性，比如精准删除 `remove(where:)` 和像 OC 一样支持 `#warning` 和 `#error` 标签来让编译器协助自己管理代码，其中最好玩的还是可以通过 `CaseIterable` 协议来让 `enum` 的 `case` 可以被枚举，到时候 DSL Parser/Interpreter 之类的应用代码就更优雅了。

### 🐕 [NSURLProtocol 拦截 NSURLSession 请求时body丢失问题解决方案探讨](https://yq.aliyun.com/articles/543412/?spm=a2c41.11181499.0.0)

NSURLProtocol 我们常用来拦截网络请求，但当使用 NSURLSession 发起 Post 网络请求的时候，用 NSURLProtocol 拦截就会发生无法获取 Post Body 的情况。为此本文给出来几种解决办法，并且给出了最佳实践方案。

### 🐎 [UIView Auto Layout life cycle](http://www.vadimbulavin.com/view-auto-layout-life-cycle/)

Auto Layout 是苹果一直在大力推广的布局方式，现在在开发者中的使用也越来越多。这篇文章从『**约束更新**』、『**布局计算**』和『**渲染显示**』三个过程非常细致地分析了UIView 进行 Auto Layout 的生命周期，最后还讨论了 **Intrinsic Content Size（如 UIButton 等可由内容自然决定大小）** 和 **Alignment Rectangle（如添加阴影等可见区域与 Frame 不等的）** 的使用。

### 🐕 🚧 [Elegantly chaining UIViewPropertyAnimators](https://twittemb.github.io/swift/animations/reactive%20programming/rxswift/2018/03/24/elegantly-chaining-uiviewpropertyanimators/)

在 iOS 10 之前，如果想按顺序播放动画，会通过 UIView.animate() 里的 completed blok 嵌套起来，代码看起来并不优雅。iOS 10 引入了面向对象版本的 UIViewPropertyAnimator。它允许将每个动画的定义与它们连接方式区分开来，拥有更好的可读性，也方便解耦。

还可以将 UIViewPropertyAnimation 兼容 RxSwift，通过“流”将所有的动画连接起来。

然而更为巧妙的实现方式，是通过自定义操作符实现链式调用，最终效果：self.animator1 ~> self.animator2 ~> self.animator3 ~> self.animator4。

### 🐢 [冰霜的 ML 入门笔记](https://github.com/halfrost/Halfrost-Field/blob/master/contents/Machine_Learning/contents.md)

冰霜的文章一直都是以深入全面、通俗易懂著称。《冰霜的 ML 入门笔记》包含了他在学习斯坦福机器学习入门视频课程的全部笔记。如果你没有足够的时间去看这些视频，或者听英文的能力没有那么强，这些笔记对你来说一定非常有用了，而且你也不用担心会错过视频中的一些内容，因为这些笔记和冰霜以往的风格一样，内容比视频只多不少。

### 🐢 [Tips to become a better Swift (iOS) Developer](https://www.developerinsider.in/tips-to-become-a-better-swift-ios-developer/)

语法糖越多的语言，就越容易体现出简洁高效和啰嗦冗长之间有多大的差别。不幸又万幸的是，和 Ruby 类似，Swift 是一门语法糖很多的语言。文章介绍了很多 Swift 一些基础但又高效的写法，如果静下心来仔细阅读，相信你会写出不一样的 Swift 代码。

### 🐎 [compactMap 了解一下？](https://kemchenj.github.io/2018-04-01/)

Swift 4.1 里将 `flatMap` 的其中一个版本重命名为 `compactMap`，但无论全局替换或者是逐个编译警告消除都不是一个好办法，这篇文章就介绍了如何使用方法重载以及重构工具，精准快速地替换掉项目里弃用掉的 `flatMap`。

### 🐎 [教你如何反编译微信小程序](https://mp.weixin.qq.com/s/secw4vAzCUi-qmCJ3kuxYA)

作者大致描述了如何将微信小程序编译之后的文件反编译成开发工具可读的源码的过程，文章描述了一个大概，建议阅读完文章之后，有兴趣的话可以进一步了解一下作者开源的 [反编译工具](https://github.com/qwerty472123/wxappUnpacker)。

### 🐕 [硅谷生活半年记](https://mp.weixin.qq.com/s/ydHLBmt0FpNwgvCKTCnnVw)

作者对自己最近半年在硅谷切身经历的小结，从医、食、住、行、环境、薪酬等方面对硅谷生活进行了介绍并与国内做了简单对比，同时配以大量图片，让我们了解了一种完全不同的生活方式的同时，也给我们对未来的规划提供了些许参考。

## 代码

### [SwiftSoup](https://github.com/scinfu/SwiftSoup)

`SwiftSoup` 是一个纯 Swift 的 HTML 解析库，支持跨平台（Linux、iOS、macOS、tvOS 和 watch OS）。它提供了提取并操作数据的 convenient API，充分利用了 DOM、CSS 和 类似 jquery 的方法。`SwiftSoup` 实现了 WHATWG HTML5 规范，将 HTML 解析为与现代浏览器相同的 DOM。

## 工具

### [函数响应式编程框架：ReactiveCocoa 和 RXSwift 速查表](https://github.com/ValiantCat/FRPCheatSheeta)

近几年函数响应式编程在移动端的应用越来越多，其中『[ReactiveObjC](https://github.com/ReactiveCocoa/ReactiveObjC)』和『[RxSwift](https://github.com/ReactiveX/RxSwift)』分别是 ObjC 和 Swift 对这种编程思维实现的框架。[ValiantCat](https://github.com/ValiantCat) 使用 XMind 将这两个框架的 API 和 小技巧整理成了脑图，作为速查表辅助自己学习记忆。

另外，[shuaiwang007](https://github.com/shuaiwang007) 也总结了一些 [RAC + MVVM 在实际项目中用法](https://github.com/shuaiwang007/RAC)。


## 本期编辑

[@没故事的卓同学](https://weibo.com/1926303682/profile)，[@四娘](https://kemchenj.github.io)，[@mmoaay](https://weibo.com/u/1302422271)，[@享耳先森](https://github.com/iblacksun)，[@EyreFree](https://weibo.com/eyrefree777)，[@Damonwong](https://weibo.com/damonone)，[@折腾范儿_味精](http://weibo.com/agvicking)，[@张嘉夫](https://weibo.com/2949394297)，[@AidenRao](https://weibo.com/AidenRao)，[@Parsifal](https://weibo.com/parsifalchang)， [@叶孤城](https://weibo.com/u/1438670852)，[@aaaron7](https://weibo.com/aaaron7)

## 说明

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

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