课程目录
1-1 [Swift语言入门知识] 第一课:iOS项目模板的介绍 (08:00)
1-2 [Swift语言入门知识] 使用Playground学习Swift (03:13)
1-3 [Swift语言入门知识] Swift语言中的常量和变量 (01:48)
1-4 [Swift语言入门知识] Swift的表达式Expressions (01:34)
1-5 [Swift语言入门知识] Swift的标识符和关键字 (01:10)
1-6 [Swift语言入门知识] 给Swift代码添加注释语句 (01:52)
1-7 [Swift语言入门知识] Swift的几个打印输出语句 (01:28)
1-8 [Swift语言入门知识] 在控制台输出类的实例及其属性 (01:24)
2-1 [Swift的数据类型] Swift的(Boolean)布尔类型 (01:45)
2-2 [Swift的数据类型] Swift的(Float)和(Double)浮点类型 (01:59)
2-3 [Swift的数据类型] Swift的(Int)整形类型 (03:37)
2-4 [Swift的数据类型] 字符串(String)及对字符(Characters)的遍历 (02:03)
2-5 [Swift的数据类型] Swift字符串的使用详解 (03:54)
2-6 [Swift的数据类型] Swift字符串的Raw String (02:56)
2-7 [Swift的数据类型] Swift中的元组(Tuples) (01:28)
2-8 [Swift的数据类型] 基本数据类型之间的互相转换 (02:12)
2-9 [Swift的数据类型] 一维数组(Array)的使用详解 (03:25)
2-10 [Swift的数据类型] 多维数组的创建和遍历 (01:24)
2-11 [Swift的数据类型] 数组的几种遍历方式 (01:30)
2-12 [Swift的数据类型] 字符串和字符数组的相互转换 (01:34)
2-13 [Swift的数据类型] 通过filter, allSatisfy等方法过滤数组 (01:59)
2-14 [Swift的数据类型] 通过min, max等方法过滤数组中的元素 (01:30)
2-15 [Swift的数据类型] 通过prefix, drop等方法截取数组 (01:16)
2-16 [Swift的数据类型] 通过flatMap, compactMap等方法对数组进行降 (02:50)
2-17 [Swift的数据类型] 字典(Dictionary)的使用详解 (03:53)
2-18 [Swift的数据类型] 对字典进行过滤和映射 (03:01)
2-19 [Swift的数据类型] 集合(Set)的创建、修改以及集合之间的交、并、差运算 (03:00)
2-20 [Swift的数据类型] Swift的一元、二元和三元运算符 (02:12)
2-21 [Swift的数据类型] 位运算、左移、右移和溢处的处理 (01:56)
2-22 [Swift的数据类型] 比较运算符和区间运算符的使用 (01:45)
3-1 [Swift的流程控制] 使用for-in循环遍历数组 (01:52)
3-2 [Swift的流程控制] 使用循环语句获得序列中的最小值 (02:04)
3-3 [Swift的流程控制] switch-case语句的实例解析 (02:12)
3-4 [Swift的流程控制] continue、break和fallthrough的区别 (02:36)
3-5 [Swift的流程控制] while和repeat-while循环语句 (01:58)
3-6 [Swift的流程控制] 实战:使用while实现对数字的反转 (01:56)
3-7 [Swift的流程控制] if和if-let判断语句的使用解析 (02:27)
3-8 [Swift的流程控制] #if, #warning, #error等预处理器指令的使 (01:50)
4-1 [Swift的函数] 函数func以及函数的参数和返回值 (02:23)
4-2 [Swift的函数] 函数的外部参数名 (01:55)
4-3 [Swift的函数] 创建拥有任意数量参数的函数 (02:15)
4-4 [Swift的函数] 函数的输入输出inout参数解析 (01:23)
4-5 [Swift的函数] 给函数的参数设置默认的取值 (01:27)
4-6 [Swift的函数] 使用函数作为另一个函数的参数 (01:49)
4-7 [Swift的函数] 函数类型的解析 (01:39)
4-8 [Swift的函数] 使用函数类型作为函数的返回类型 (01:38)
4-9 [Swift的函数] 函数可以拥有多个返回值 (01:37)
4-10 [Swift的函数] 藏在函数内部的函数 (01:25)
4-11 [Swift的函数] 递归函数的使用解析 (02:09)
4-12 [Swift的函数] Swift那些非常实用的内部函数 (02:57)
4-13 [Swift的函数] 使用defer延缓代码的执行 (02:22)
4-14 [Swift的函数] 使用guard-let简化复杂的判断语句 (01:28)
4-15 [Swift的函数] 使用prefixm, infix, postfix自定义运算 (02:00)
4-16 [Swift的函数] Swift中的闭包(Closure)详解 (03:10)
4-17 [Swift的函数] 逐步阐明闭包的省略写法 (01:48)
4-18 [Swift的函数] 闭包的延迟调用特性 (01:16)
4-19 [Swift的函数] 闭包对外部变量的捕获 (03:30)
5-1 [Swift的类与对象] Swift的枚举(enum)类型及遍历 (02:14)
5-2 [Swift的类与对象] 给枚举类型添加方法 (01:49)
5-3 [Swift的类与对象] 使用CaseIterable 获取枚举的所有成员 (01:09)
5-4 [Swift的类与对象] Swift的结构(struct)类型及其下标(subscri (02:57)
5-5 [Swift的类与对象] 使用mutating修饰函数以修改属性的值 (01:59)
5-6 [Swift的类与对象] 通过callAsFunction函数将实例作为函数来调用 (01:37)
5-7 [Swift的类与对象] 使用同名函数使函数的调用更加简单 (02:06)
5-8 [Swift的类与对象] 类(class)的初始化方法、属性和方法 (02:07)
5-9 [Swift的类与对象] 类的引用(reference)特征 (01:28)
5-10 [Swift的类与对象] 类和结构两个类型的比较 (02:05)
5-11 [Swift的类与对象] 类属性的set和get方法解析 (01:28)
5-12 [Swift的类与对象] 类属性的willSet和didSet方法解析 (01:41)
5-13 [Swift的类与对象] 类析构方法(deinit)的使用 (01:25)
5-14 [Swift的类与对象] 给类添加下标(subscript) (01:36)
5-15 [Swift的类与对象] 使用类方法和静态方法 (02:28)
5-16 [Swift的类与对象] 将一个类的实例作为另一个类的属性 (01:32)
5-17 [Swift的类与对象] 类的继承以及方法的重写(override) (01:35)
5-18 [Swift的类与对象] 使用is语句检查实例的类型 (02:56)
5-19 [Swift的类与对象] 父类在实例类型转化时的应用 (01:32)
5-20 [Swift的类与对象] 使用Any表示任意值类型 (02:17)
6-1 [Swift语言的扩展协议] 使用扩展(extension)扩展类型的属性 (01:34)
6-2 [Swift语言的扩展协议] 使用extension对方法进行扩展 (01:16)
6-3 [Swift语言的扩展协议] 实战:通过扩展判断数组是否相同 (01:45)
6-4 [Swift语言的扩展协议] Swift语言中的泛型编程 (02:57)
6-5 [Swift语言的扩展协议] 使用协议(protocol)进行方法的声明 (03:25)
6-6 [Swift语言的扩展协议] 使用typealias 关键词类型定义新的名称 (02:19)
6-7 [Swift语言的扩展协议] 使用associatedtype给协议添加一个类型占位符 (02:37)
6-8 [Swift语言的扩展协议] 面向协议编程:保证类型转换的安全性 (01:59)
6-9 [Swift语言的扩展协议] 面向协议编程:通过扩展为协议提供默认的实现 (03:20)
6-10 [Swift语言的扩展协议] 面向协议编程实战:基于协议的网络请求1 (03:06)
6-11 [Swift语言的扩展协议] 面向协议编程实战:基于协议的网络请求2 (03:24)
6-12 [Swift语言的扩展协议] 面向协议编程实战:基于协议的网络请求3 (04:24)
6-13 [Swift语言的扩展协议] 使用some关键词使编译器根据返回值推断值的类型 (01:49)
6-14 [Swift语言的扩展协议] 使用where 关键词进行条件约束和类型约束 (03:17)
6-15 [Swift语言的扩展协议] 问号?和感叹号!的用法解析 (04:09)
6-16 [Swift语言的扩展协议] Swift中的下划线_的几处妙用 (01:32)
6-17 [Swift语言的扩展协议] Swift的do-try-catch错误处理模式 (03:41)
6-18 [Swift语言的扩展协议] 使用MemoryLayout查看各种类型的内存占用情况 (02:54)
6-19 [Swift语言的扩展协议] 使用Swift代码对内存指针进行操作 (02:21)
6-20 [Swift语言的扩展协议] 实例的引用特征和Swift的内存管理 (01:52)
6-21 [Swift语言的扩展协议] 实例的交叉引用和弱引用(weak) (02:04)
6-22 [Swift语言的扩展协议] Swift的懒加载(lazy initialization) (02:07)
7-1 [Swift语言的常见概念] 范围Range、ClosedRange和NSRange的使用 (02:08)
7-2 [Swift语言的常见概念] 点CGPoint和CGAffineTransform的使用 (02:12)
7-3 [Swift语言的常见概念] 尺寸CGSize的使用详解 (02:06)
7-4 [Swift语言的常见概念] 范围CGRect的使用详解 (02:28)
7-5 [Swift语言的常见概念] 使用NSString对字符串进行各种操作 (02:28)
7-6 [Swift语言的常见概念] 日期Date和DateFormatter日期的格式化 (03:21)
7-7 [Swift语言的常见概念] 实战:检查两个项目的生命周期是否重叠 (01:40)
7-8 [Swift语言的常见概念] 日历Calendar和日期组件DateComponents (01:16)
7-9 [Swift语言的常见概念] 日历Calendar和时区TimeZone (01:29)
7-10 [Swift语言的常见概念] 使用定时组件Timer执行定时任务 (03:01)
7-11 [Swift语言的常见概念] 使用UserDefaults和归档方式存取用户数据 (05:20)
7-12 [Swift语言的常见概念] 路径URL的使用详解 (02:06)
7-13 [Swift语言的常见概念] 使用DispatchGroup管理线程组 (01:34)
7-14 [Swift语言的常见概念] 使用UIScreen查询设备屏幕信息 (01:50)
7-15 [Swift语言的常见概念] 使用UIColor设置界面组件的颜色属性 (02:12)
7-16 [Swift语言的常见概念] Swift中的KVC键值编码和KVO键值观察 (02:40)
7-17 [Swift语言的常见概念] 使用@autoclosure把一句话表达式封装成闭包 (02:06)
7-18 [Swift语言的常见概念] 使用@available声明类型所依赖的平台版本 (01:53)
7-19 [Swift语言的常见概念] 使用@discardableResult屏蔽Result u (01:17)
7-20 [Swift语言的常见概念] 使用@dynamicCallable像调用函数一样使用实例 (02:01)
7-21 [Swift语言的常见概念] 使用@_dynamicReplacement实现方法或属性的 (02:57)
7-22 [Swift语言的常见概念] 使用@dynamicMemberLookup实现动态成员查找 (02:39)
7-23 [Swift语言的常见概念] 使用@escaping创建可逃逸的闭包 (02:31)
7-24 [Swift语言的常见概念] 使用@propertyWrapper对被包装的类型进行自定义 (03:35)
7-25 [Swift语言的常见概念] 使用@resultBuilder通过指定的结构组合多个res (03:16)
7-26 [Swift语言的常见概念] 通过让对象本身作为返回值实现优雅的链式语法 (02:17)
7-27 [Swift语言的常见概念] 通过单例模式实现异步任务的按序执行 (03:01)
7-28 [Swift语言的常见概念] 响应式编程框架Combine:使用Publisher发布者 (02:27)
7-29 [Swift语言的常见概念] 响应式编程框架Combine:使用PassthroughSu (02:05)
7-30 [Swift语言的常见概念] 响应式编程框架Combine:处理PassthroughSu (02:04)
7-31 [Swift语言的常见概念] 响应式编程框架Combine:使用CurrentValueS (02:02)
7-32 [Swift语言的常见概念] 响应式编程框架实战:下载远程图片 (02:31)
7-33 [Swift语言的常见概念] 响应式编程框架实战:Combine和Notification (04:35)
7-34 [Swift语言的常见概念] 响应式编程框架实战:@Published修饰符的使用 (02:49)
7-35 [Swift语言的常见概念] 响应式编程框架实战:贪吃蛇游戏的开发 - 配置 (03:30)
7-36 [Swift语言的常见概念] 响应式编程框架实战:贪吃蛇游戏的开发 - 工具类 (06:04)
7-37 [Swift语言的常见概念] 响应式编程框架实战:贪吃蛇游戏的开发 - 搭建场景 (04:22)
7-38 [Swift语言的常见概念] 响应式编程框架实战:贪吃蛇游戏的开发 - 完成 (03:23)
8-1 [实用进阶] Swift语言中的三种消息传递模式 (05:30)
8-2 [实用进阶] 闭包在定时任务、动画和线程中的使用 (02:49)
8-3 [实用进阶] 通过protocol在两个对象中进行消息传递 (06:34)
8-4 [实用进阶] 通过间接代理进行对象间的消息传递 (04:41)
8-5 [实用进阶] 通过属性进行对象间的消息传递 (04:42)
8-6 [实用进阶] 使用通知的方法进行对象间的数据传递 (03:27)
8-7 [实用进阶] 使用performSegue在故事板页面之间进行数据传递1 (04:47)
8-8 [实用进阶] 使用performSegue在故事板页面之间进行数据传递2 (03:33)
8-9 [实用进阶] Swift中的栈Stack和队列Queue详解 (04:13)
8-10 [实用进阶] Swift中的链表LinkedList详解 (02:24)
8-11 [实用进阶] 使用Swift创建一个二叉树BinaryTreeNode (03:08)
8-12 [实用进阶] 冒泡排序算法的Swift实现 (08:56)
8-13 [实用进阶] 选择排序算法的Swift实现 (03:19)
8-14 [实用进阶] 快速排序算法的Swift实现 (01:51)
8-15 [实用进阶] 插入排序算法的Swift实现 (03:08)
8-16 [实用进阶] 希尔排序算法的Swift实现 (06:33)
8-17 [实用进阶] 归并排序算法的Swift实现 (04:17)
8-18 [实用进阶] 基数排序算法的Swift实现 (04:00)
8-19 [实用进阶] 堆排序算法的Swift实现 (03:48)
8-20 [实用进阶] Swift语言中的设计模式:单例模式 (02:33)
8-21 [实用进阶] Swift语言中的设计模式:工厂模式 (03:04)
8-22 [实用进阶] Swift语言中的设计模式:建造者模式 (02:00)
8-23 [实用进阶] Swift语言中的设计模式:原型模式 (01:38)
8-24 [实用进阶] Swift语言中的设计模式:享元模式 (03:03)
8-25 [实用进阶] Swift语言中的设计模式:装饰者模式 (02:16)
9-1 [完整实例] 第一部分:在Xcode中创建ACT学习辅助软件ACTHelp (03:59)
9-2 [完整实例] 创建应用程序的Identifier并添加测试设备 (03:21)
9-3 [完整实例] 创建开发证书、发布证书和Provisioning Profi (06:10)
9-4 [完整实例] 在AppConnect中创建产品ACTHelper (09:58)
9-5 [完整实例] 在ACTHelper项目中使用CocoaPod管理插件 (03:02)
9-6 [完整实例] 第二部分:整合项目里的所有通用常量和枚举 (03:48)
9-7 [完整实例] 创建BaseViewController作为控制器的基类 (05:18)
9-8 [完整实例] 创建作为主要功能入口的欢迎页面 (06:23)
9-9 [完整实例] 设置应用程序顶部状态栏的前景颜色 (02:02)
9-10 [完整实例] 第三部分:创建登陆页面中的自定义视图及相关组件 (04:38)
9-11 [完整实例] 创建登陆页面的自定义表单Row (04:45)
9-12 [完整实例] 登陆页面的自定义表单Row的内容校验 (07:27)
9-13 [完整实例] 创建所有登录、注册相关页面的基类 (03:34)
9-14 [完整实例] 制作整个登陆页面的基本框架 (06:45)
9-15 [完整实例] 实现国内、海外用户注册表单的切换 (03:02)
9-16 [完整实例] 使用通知中心解决按钮被键盘遮挡的问题 (05:11)
9-17 [完整实例] 使用AES加密算法对密码进行加密 (06:27)
9-18 [完整实例] 创建UserInfo数据实体类 (06:49)
9-19 [完整实例] 创建用于获取用户信息的网络请求类 (04:56)
9-20 [完整实例] 存储和读取沙箱中的用户状态 (02:42)
9-21 [完整实例] 创建一个工具类以获取应用程序的主窗口 (04:50)
9-22 [完整实例] 完成整个登录页面的业务功能 (06:50)
9-23 [完整实例] 第四部分:开始制作注册流程中的账号输入页面 (09:56)
9-24 [完整实例] 实现向服务器请求验证码的功能 (03:50)
9-25 [完整实例] 完成注册流程中的账号输入页面 (05:01)
9-26 [完整实例] 开始制作注册流程中的验证码输入页面 (06:56)
9-27 [完整实例] 完成注册流程中的验证码输入页面 (03:18)
9-28 [完整实例] 开始制作注册流程中的密码设置页面 (03:49)
9-29 [完整实例] 完成注册流程中的密码设置页面 (05:54)
9-30 [完整实例] 完成注册流程中的最后一个页面 (04:05)
9-31 [完整实例] 第五部分:制作用于过滤试卷的区域 (04:29)
9-32 [完整实例] 完成页面顶部过滤面板等区域的创建 (07:37)
9-33 [完整实例] 创建用于获取试卷列表的实体类和网络请求 (04:30)
9-34 [完整实例] 实现试卷列表中的自定义视图 (03:19)
9-35 [完整实例] 完成试卷列表自定义视图的制作 (07:34)
9-36 [完整实例] 整合试卷列表的自定义视图 (02:35)
9-37 [完整实例] 实现试卷过滤面板的折叠和展开 (03:19)
9-38 [完整实例] 创建一个自定义视图作为试卷过滤按钮 (02:41)
9-39 [完整实例] 制作用来拾取考试类型的页面 (05:35)
9-40 [完整实例] 实用ACT/SAT考试类型的选取 (03:08)
9-41 [完整实例] 制作根据区域对试卷进行选取的页面 (06:57)
9-42 [完整实例] 制作试卷的区域列表视图 (03:32)
9-43 [完整实例] 完成根据区域对试卷进行选取的页面的制作 (05:59)
9-44 [完整实例] 制作自定义视图以显示试卷中的每个科目 (04:46)
9-45 [完整实例] 实现向服务器请求试卷信息的功能 (05:15)
9-46 [完整实例] 创建试卷内容页面中的一些自定义视图 (07:54)
9-47 [完整实例] 完成试卷内容页面的制作 (04:32)
9-48 [完整实例] 创建用于获取试卷答案列表的实体类和网络请求 (05:28)
9-49 [完整实例] 制作一个自定义视图以显示试卷的答案列表 (05:27)
9-50 [完整实例] 制作一个自定义视图以显示试题编号和答案 (06:24)
9-51 [完整实例] 创建用于获取题目备选答案列表的实体类 (04:19)
9-52 [完整实例] 创建用于获取题目备选答案列表的网络请求 (02:48)
9-53 [完整实例] 创建位于页面右下角的快捷功能按钮 (05:24)
9-54 [完整实例] 制作用于展示试题内容的详情页面 (06:00)
9-55 [完整实例] 完成试题内容详情页面的制作 (05:21)
9-56 [完整实例] 完成试题原文页面的制作 (10:12)
9-57 [完整实例] 第六部分:开始制作用户档案页面 (04:18)
9-58 [完整实例] 开始创建用户信息编辑页面 (09:19)
9-59 [完整实例] 完成用户信息编辑页面的基本框架 (05:45)
9-60 [完整实例] 实现用户头像的编辑功能 (07:11)
9-61 [完整实例] 将用户头像上传到七牛服务器并存储在沙箱 (03:05)
9-62 [完整实例] 实现用户昵称的编辑 (03:24)
9-63 [完整实例] 开始制作用户反馈页面 (05:23)
9-64 [完整实例] 完成用户反馈页面的制作 (09:09)
9-65 [完整实例] 设置应用程序的图标和启动画面 (04:44)
9-66 [完整实例] 第七部分:App的打包、上传和提交审核 (05:01)