 Swift 迁移之路 - 唐巧2018-07-05 Swift 4.2 猿辅导 的 Swift 迁移之路路 决策回顾 • 背景 • 时间:2016 年年 6 ⽉月 • Swift 版本:Swift 2 • 依赖很重的 C++ 直播库 • 历史 Objective-C 代码⾏行行数:8 万⾏行行 • 团队 iOS 成员⼈人数:2 ⼈人 • ⼤大家都对使⽤用 Swift 抱有极⾼高的兴趣 决策⽅方案 混编,从此之后不不再写 全新的项⽬目,历史 Objective-C 代码⾏行行数:0 ⾏行行 • 需要依赖 C++ 直播组件 • 团队 iOS 成员⼈人数:2 ⼈人 决策⽅方案 纯 Swift 写⼀一个新项⽬目 遇到的问题 • 编译器器性能问题,编译⼀一次 5 分钟 • IDE ⽆无误编译,卡顿严重。 • Swift 和 C++ 底层直播库的调⽤用麻烦,调试时常出问题。 • 系统补全时常挂掉 • pod 1 Category … 项⽬目共⽤用的 Common 组件 公共 UI 样式 公⽤用的参数 项⽬目的底层组件 ⽹网络组件 视频播放 资源升级 … … 业务功能组件 OC{ ⼩小猿商城 24 点游戏 奥数闯关 英语随身听 ⼩小猿⽇日报 视频播放 收藏功能 导出PDF 智囊团 … 组件化进展 • 已经完成约 30% 的功能模块组 件化 • 功能模块耦合太严重,是组件化0 码力 | 43 页 | 1.37 MB | 1 年前3 Swift 迁移之路 - 唐巧2018-07-05 Swift 4.2 猿辅导 的 Swift 迁移之路路 决策回顾 • 背景 • 时间:2016 年年 6 ⽉月 • Swift 版本:Swift 2 • 依赖很重的 C++ 直播库 • 历史 Objective-C 代码⾏行行数:8 万⾏行行 • 团队 iOS 成员⼈人数:2 ⼈人 • ⼤大家都对使⽤用 Swift 抱有极⾼高的兴趣 决策⽅方案 混编,从此之后不不再写 全新的项⽬目,历史 Objective-C 代码⾏行行数:0 ⾏行行 • 需要依赖 C++ 直播组件 • 团队 iOS 成员⼈人数:2 ⼈人 决策⽅方案 纯 Swift 写⼀一个新项⽬目 遇到的问题 • 编译器器性能问题,编译⼀一次 5 分钟 • IDE ⽆无误编译,卡顿严重。 • Swift 和 C++ 底层直播库的调⽤用麻烦,调试时常出问题。 • 系统补全时常挂掉 • pod 1 Category … 项⽬目共⽤用的 Common 组件 公共 UI 样式 公⽤用的参数 项⽬目的底层组件 ⽹网络组件 视频播放 资源升级 … … 业务功能组件 OC{ ⼩小猿商城 24 点游戏 奥数闯关 英语随身听 ⼩小猿⽇日报 视频播放 收藏功能 导出PDF 智囊团 … 组件化进展 • 已经完成约 30% 的功能模块组 件化 • 功能模块耦合太严重,是组件化0 码力 | 43 页 | 1.37 MB | 1 年前3
 Swift for TensorFlow - 莲叔Swift 莲叔(aaaron7) About me • 莲叔 / aaaron7 • SwiftGG 成员,⽬目前没有参与翻译⼯工作,主要负责在群⾥里里灌 ⽔水; • ⽬目前供职于 UC 短视频组; • 兴趣:Swift,函数式编程,机器器学习; • ⾃自我要求:争取不不坑 Roadmap Intro How Example • Why • Swift for TensorFlow0 码力 | 56 页 | 3.03 MB | 1 年前3 Swift for TensorFlow - 莲叔Swift 莲叔(aaaron7) About me • 莲叔 / aaaron7 • SwiftGG 成员,⽬目前没有参与翻译⼯工作,主要负责在群⾥里里灌 ⽔水; • ⽬目前供职于 UC 短视频组; • 兴趣:Swift,函数式编程,机器器学习; • ⾃自我要求:争取不不坑 Roadmap Intro How Example • Why • Swift for TensorFlow0 码力 | 56 页 | 3.03 MB | 1 年前3
 Hello 算法 1.0.0b1 Swift版释、内容 注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.3. 在动画图解中高效学习 视频和图片相比于文字的信息密度和结构化程度更高,更容易理解。在本书中,知识重难点会主要以动画、图 解的形式呈现,而文字的作用则是作为动画和图的解释与补充。 阅读本书时,若发现某段内容提供了动画或图解 ?(log ?) , ?(?) , ?(?2) , ?(2?) 。 38 3. 数据结构简介 3.1. 数据与内存 3.1.1. 基本数据类型 谈到计算机中的数据,我们能够想到文本、图片、视频、语音、3D 模型等等,这些数据虽然组织形式不同,但 都是由各种基本数据类型构成的。 「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用。 ‧「整数」根据不同的长度分为 byte0 码力 | 190 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 Swift版释、内容 注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.3. 在动画图解中高效学习 视频和图片相比于文字的信息密度和结构化程度更高,更容易理解。在本书中,知识重难点会主要以动画、图 解的形式呈现,而文字的作用则是作为动画和图的解释与补充。 阅读本书时,若发现某段内容提供了动画或图解 ?(log ?) , ?(?) , ?(?2) , ?(2?) 。 38 3. 数据结构简介 3.1. 数据与内存 3.1.1. 基本数据类型 谈到计算机中的数据,我们能够想到文本、图片、视频、语音、3D 模型等等,这些数据虽然组织形式不同,但 都是由各种基本数据类型构成的。 「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用。 ‧「整数」根据不同的长度分为 byte0 码力 | 190 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 Swift版释、内容 注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.3. 在动画图解中高效学习 视频和图片相比于文字的信息密度和结构化程度更高,更容易理解。在本书中,知识重难点会主要以动画、图 解的形式呈现,而文字的作用则是作为动画和图的解释与补充。 阅读本书时,若发现某段内容提供了动画或图解 ?(log ?) , ?(?) , ?(?2) , ?(2?) 。 38 3. 数据结构简介 3.1. 数据与内存 3.1.1. 基本数据类型 谈到计算机中的数据,我们能够想到文本、图片、视频、语音、3D 模型等等,这些数据虽然组织形式不同,但 都是由各种基本数据类型构成的。 「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用。 ‧「整数」根据不同的长度分为 byte0 码力 | 199 页 | 15.72 MB | 1 年前3 Hello 算法 1.0.0b2 Swift版释、内容 注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.3. 在动画图解中高效学习 视频和图片相比于文字的信息密度和结构化程度更高,更容易理解。在本书中,知识重难点会主要以动画、图 解的形式呈现,而文字的作用则是作为动画和图的解释与补充。 阅读本书时,若发现某段内容提供了动画或图解 ?(log ?) , ?(?) , ?(?2) , ?(2?) 。 38 3. 数据结构简介 3.1. 数据与内存 3.1.1. 基本数据类型 谈到计算机中的数据,我们能够想到文本、图片、视频、语音、3D 模型等等,这些数据虽然组织形式不同,但 都是由各种基本数据类型构成的。 「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用。 ‧「整数」根据不同的长度分为 byte0 码力 | 199 页 | 15.72 MB | 1 年前3
 Hello 算法 1.1.0 Swift版hello‑algo.com 5 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织 形式各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 79 4.3 列表 列表(list)是一个抽象的数据结构0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Swift版hello‑algo.com 5 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织 形式各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 79 4.3 列表 列表(list)是一个抽象的数据结构0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Swift 版hello‑algo.com 5 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织 形式各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 www.hello‑algo.com 79 4.3 列表 列表(list)是一个抽象的0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Swift 版hello‑algo.com 5 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 度变化,从而具备 一定的“动态性”。 Tip 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织 形式各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 www.hello‑algo.com 79 4.3 列表 列表(list)是一个抽象的0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.0.0b5 Swift版释、内容注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画和图解形式展示,而文字则作为动画和图片的解释与补充。 如果你在阅读本书时,发现某段内容提供了图 0‑2 过程中 对其长度进行调整。 � 如果你感觉物理结构理解起来有困难,建议先阅读下一章“数组与链表”,然后再回顾本节内 容。 3.2 基本数据类型 谈及计算机中的数据,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织形式 各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种类型。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环的操作就可以通过循环链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用到循环链表。比如在音频、视频播放器中,数 据流可能会被分成多个缓冲块并放入一个循环链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 76 4.3 列表 数组长度不可变导致实用性降低。在实际0 码力 | 376 页 | 30.70 MB | 1 年前3 Hello 算法 1.0.0b5 Swift版释、内容注释、多行注释。 /* 标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画和图解形式展示,而文字则作为动画和图片的解释与补充。 如果你在阅读本书时,发现某段内容提供了图 0‑2 过程中 对其长度进行调整。 � 如果你感觉物理结构理解起来有困难,建议先阅读下一章“数组与链表”,然后再回顾本节内 容。 3.2 基本数据类型 谈及计算机中的数据,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织形式 各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种类型。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环的操作就可以通过循环链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用到循环链表。比如在音频、视频播放器中,数 据流可能会被分成多个缓冲块并放入一个循环链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 76 4.3 列表 数组长度不可变导致实用性降低。在实际0 码力 | 376 页 | 30.70 MB | 1 年前3
 Hello 算法 1.0.0 Swift版标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 第 0 章 前言 hello‑algo.com 5 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 可以在程序运行过程中对其长 度进行调整。 � 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织 形式各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 79 4.3 列表 「列表 list」是一个抽象的数据结0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 Swift版标题注释,用于标注函数、类、测试样例等 */ // 内容注释,用于详解代码 /** * 多行 第 0 章 前言 hello‑algo.com 5 * 注释 */ 0.2.2 在动画图解中高效学习 相较于文字,视频和图片具有更高的信息密度和结构化程度,更易于理解。在本书中,重点和难点知识将主 要通过动画以图解形式展示,而文字则作为解释与补充。 如果你在阅读本书时,发现某段内容提供了如图 0‑2 所示的动画图解,请以图为主、以文字为辅,综合两者 可以在程序运行过程中对其长 度进行调整。 � 如果你感觉物理结构理解起来有困难,建议先阅读下一章,然后再回顾本节内容。 3.2 基本数据类型 当谈及计算机中的数据时,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织 形式各异,但它们都由各种基本数据类型构成。 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种。 ‧ 整数类型 组进程进行循环。每个进程被赋予一个时间片,当时间片用完时,CPU 将切换到下一个进程。这种循 环操作可以通过环形链表来实现。 ‧ 数据缓冲区:在某些数据缓冲区的实现中,也可能会使用环形链表。比如在音频、视频播放器中,数据 流可能会被分成多个缓冲块并放入一个环形链表,以便实现无缝播放。 第 4 章 数组与链表 hello‑algo.com 79 4.3 列表 「列表 list」是一个抽象的数据结0 码力 | 378 页 | 17.59 MB | 1 年前3
共 8 条
- 1













