从零开始学swift是由关东升编写,作者是一个在IT领域爬滚打20年的程序员、培训师。本书是初学者学习swift必备入门书籍。该书基于Swift3.x,通过大量案例全面介绍苹果平台的应用开发。Swift3.x的语法有了重大变化,更加的独立有Objective-C语言,从零开始学swift(第二版)针对Swift3.x进行了全面的升级,全面涵盖了Swift3.x基础语法、面向协议编程、Swift编码规范、Swift混合编程(Swift与Objective-C/C++)、Spritekit游戏引擎等内容。从零开始学swift全书共分5部分,第一部分介绍了Swift的一些基础知识,第二部分介绍了基于Swift语言的中高级内容,第三部分主要介绍了Swift与Objective-C/C/C++的混合编程等相关问题,第四部分介绍了基于Swift语言的2D游戏引擎技术,第五部分详细介绍了一个游戏App的开发过程,系统而全面,有需要的朋友可以下载阅读。
《从零开始学swift》是基于Swift3.x全面更新,涵盖了面向协议编程、Swift编码规范、Swift混合编程(Swift与Objective-C/C++)、Spritekit等,本书线路图是,第一部分Swift语法,第二部分进阶(Swift内存管理、错误处理、Foundation框架),第三部分混合编程(Swift与Objective-C混合编程、Swift与C++混合编程),第四部分游戏(Spritekit游戏引),第五部分项目实战(游戏App实战—迷失航线)
目录
- 第1章 准备起航
- 1.1 本书约定
- 1.1.1 示例代码约定
- 1.1.2 图示约定
- 1.1.3 函数和方法签名约定
- 1.1.4 承接上一行代码约定
- 1.1.5 代码行号约定
- 1.2 Swift开发工具
- 1.2.1 Xcode开发工具
- 1.2.2 AppCode开发工具
- 1.3 本章小结
- 1.4 同步练习
- 第2章 第一个SWIFT程序
- 2.1 使用REPL
- 2.1.1 启动Swift REPL
- 2.1.2 使用Swift REPL
- 2.2 使用Playground
- 2.2.1 编程利器Playground
- 2.2.2 编写HelloWorld程序
- 2.3 通过Xcode创建macOS工程
- 2.3.1 创建macOS工程
- 2.3.2 编译和运行
- 2.4 使用swiftc命令
- 2.4.1 编译
- 2.4.2 运行
- 2.5 代码解释
- 2.6 本章小结
- 2.10 同步练习
- 第3章 SWIFT语法基础
- 3.1 标识符和关键字
- 3.1.1 标识符
- 3.1.2 关键字
- 3.2 常量和变量
- 3.2.1 常量
- 3.2.2 变量
- 3.2.3 使用var还是let
- 3.3 注释
- 3.4 表达式
- 3.5 本章小结
- 3.6 同步练习
- 第4章 运算符
- 4.1 算术运算符
- 4.1.1 一元运算符
- 4.1.2 二元运算符
- 4.1.3 算术赋值运算符
- 4.2 关系运算符
- 4.3 逻辑运算符
- 4.4 位运算符
- 4.5 其他运算符
- 4.6 本章小结
- 4.7 同步练习
- 第5章 SWIFT原生数据类型
- 5.1 Swift数据类型
- 5.2 整型
- 5.3 浮点型
- 5.4 数字表示方式
- 5.4.1 进制数字表示
- 5.4.2 指数表示
- 5.4.3 其他表示
- 5.5 数字类型之间的转换
- 5.5.1 整型之间的转换
- 5.5.2 整型与浮点型之间的转换
- 5.6 布尔型
- 5.7 元组类型
- 5.8 可选类型
- 5.8.1 可选类型概念
- 5.8.2 可选类型值拆包
- 5.8.3 可选绑定
- 5.9 本章小结
- 5.10 同步练习
- 第6章 SWIFT原生字符串
- 6.1 字符
- 6.1.1 Unicode编码
- 6.1.2 转义符
- 6.2 创建字符串
- 6.3 可变字符串
- 6.3.1 字符串拼接
- 6.3.2 字符串插入、删除和替换
- 6.4 字符串比较
- 6.4.1 大小和相等比较
- 6.4.2 前缀和后缀比较
- 6.5 本章小结
- 6.6 同步练习
- 第7章 控制语句
- 7.1 分支语句
- 7.1.1 if语句
- 7.1.2 switch语句
- 7.1.3 guard语句
- 7.2 循环语句
- 7.2.1 while语句
- 7.2.2 repeat-while语句
- 7.2.3 for语句
- 7.3 跳转语句
- 7.3.1 break语句
- 7.3.2 continue语句
- 7.3.3 fallthrough语句
- 7.4 范围与区间运算符
- 7.4.1 switch中使用区间运算符
- 7.4.2 for中使用区间运算符
- 7.5 值绑定
- 7.5.1 if中的值绑定
- 7.5.2 guard中的值绑定
- 7.5.3 switch中的值绑定
- 7.6 where语句
- 7.6.1 switch中使用where语句
- 7.6.2 for中使用where语句
- 7.7 本章小结
- 7.8 同步练习
- 第8章 SWIFT原生集合类型
- 8.1 Swift中的数组集合
- 8.1.1 数组声明和初始化
- 8.1.2 可变数组
- 8.1.3 数组遍历
- 8.2 Swift中的字典集合
- 8.2.1 字典声明与初始化
- 8.2.2 可变字典
- 8.2.3 字典遍历
- 8.3 Swift中的Set集合
- 8.3.1 Set声明和初始化
- 8.3.2 可变Set集合
- 8.3.3 Set集合遍历
- 8.3.4 Set集合运算
- 8.4 本章小结
- 8.5 同步练习
- 第9章 函数
- 9.1 定义函数
- 9.2 函数参数
- 9.2.1 使用参数标签
- 9.2.2 省略参数标签
- 9.2.3 参数默认值
- 9.2.4 可变参数
- 9.2.5 值类型参数的引用传递
- 9.3 函数返回值
- 9.3.1 无返回值函数
- 9.3.2 多返回值函数
- 9.4 函数类型
- 9.4.1 作为函数返回类型使用
- 9.4.2 作为参数类型使用
- 9.5 嵌套函数
- 9.6 本章小结
- 9.7 同步练习
- 第10章 闭包
- 10.1 回顾嵌套函数
- 10.2 闭包的概念
- 10.3 使用闭包表达式
- 10.3.1 类型推断简化
- 10.3.2 隐藏return关键字
- 10.3.3 省略参数名
- 10.3.4 使用闭包返回值
- 10.4 使用尾随闭包
- 10.5 捕获上下文中的变量和常量
- 10.6 本章小结
- 10.7 同步练习
- 第11章 SWIFT语言中的面向对象特性
- 11.1 面向对象概念和基本特征
- 11.2 Swift中的面向对象类型
- 11.3 枚举
- 11.3.1 成员值
- 11.3.2 原始值
- 11.3.3 相关值
- 11.4 结构体与类
- 11.4.1 类和结构体定义
- 11.4.2 再谈值类型和引用类型
- 11.4.3 引用类型的比较
- 11.4.4 运算符重载
- 11.5 类型嵌套
- 11.6 可选链
- 11.6.1 可选链的概念
- 11.6.2 使用问号( )和感叹号(!)
- 11.7 访问限定
- 11.7.1 访问范围
- 11.7.2 访问级别
- 11.7.3 使用访问级别最佳实践
- 11.8 选择类还是结构体最佳实践
- 11.8.1 类和结构体的异同
- 11.8.2 选择的原则
- 11.9 本章小结
- 11.10 同步练习
- 第12章 属性与下标
- 12.1 存储属性
- 12.1.1 存储属性概念
- 12.1.2 延迟存储属性
- 12.2 计算属性
- 12.2.1 计算属性的概念
- 12.2.2 只读计算属性
- 12.2.3 结构体和枚举中的计算属性
- 12.3 属性观察者
- 12.4 静态属性
- 12.4.1 结构体静态属性
- 12.4.2 枚举静态属性
- 12.4.3 类静态属性
- 12.5 使用下标
- 12.5.1 下标概念
- 12.5.2 示例:二维数组
- 12.6 本章小结
- 12.7 同步练习
- 第13章 方法
- 13.1 实例方法
- 13.2 可变方法
- 13.3 静态方法
- 13.3.1 结构体静态方法
- 13.3.2 枚举静态方法
- 13.3.3 类静态方法
- 13.4 本章小结
- 13.5 同步练习
- 第14章 构造与析构
- 14.1 构造函数
- 14.1.1 默认构造函数
- 14.1.2 构造函数与存储属性初始化
- 14.1.3 使用参数标签
- 14.2 构造函数重载
- 14.2.1 构造函数重载概念
- 14.2.2 结构体构造函数代理
- 14.2.3 类构造函数横向代理
- 14.3 析构函数
- 14.4 本章小结
- 14.5 同步练习
- 第15章 类继承
- 15.1 从一个示例开始
- 15.2 构造函数继承
- 15.2.1 构造函数调用规则
- 15.2.2 构造过程安全检查
- 15.2.3 构造函数继承
- 15.3 重写
- 15.3.1 重写实例属性
- 15.3.2 重写静态属性
- 15.3.3 重写实例方法
- 15.3.4 重写静态方法
- 15.3.5 下标重写
- 15.3.6 使用final关键字
- 15.4 类型检查与转换
- 15.4.1 使用is进行类型检查
- 15.4.2 使用as、as!和as 进行类型转换
- 15.4.3 使用AnyObject和Any类型
- 15.5 本章小结
- 15.6 同步练习
- 第16章 扩展
- 16.1 “轻量级”继承机制
- 16.2 声明扩展
- 16.3 扩展计算属性
- 16.4 扩展方法
- 16.5 扩展构造函数
- 16.5.1 值类型扩展构造函数
- 16.5.2 引用类型扩展构造函数
- 16.6 扩展下标
- 16.7 本章小结
- 16.8 同步练习
- 第17章 协议
- 17.1 协议概念
- 17.2 协议定义和遵从
- 17.3 协议方法
- 17.3.1 协议实例方法
- 17.3.2 协议静态方法
- 17.3.3 协议可变方法
- 17.4 协议属性
- 17.4.1 协议实例属性
- 17.4.2 协议静态属性
- 17.5 面向协议编程
- 17.5.1 协议类型
- 17.5.2 协议的继承
- 17.5.3 协议扩展
- 17.5.4 协议的合成
- 17.5.5 扩展中遵从协议
- 17.6 面向协议编程示例:表视图中使用扩展协议
- 17.7 本章小结
- 17.8 同步练习
- 第18章 泛型
- 18.1 一个问题的思考
- 18.2 泛型函数
- 18.2.1 使用泛型函数
- 18.2.2 多类型参数
- 18.3 泛型类型
- 18.4 泛型扩展
- 18.5 本章小结
- 18.6 同步练习
- 第19章 SWIFT编码规范
- 19.1 命名规范
- 19.2 注释规范
- 19.2.1 文件注释
- 19.2.2 文档注释
- 19.2.3 代码注释
- 19.2.4 使用地标注释
- 19.3 声明
- 19.3.1 变量或常量声明
- 19.3.2 属性声明
- 19.4 代码排版
- 19.4.1 空行
- 19.4.2 空格
- 19.4.3 断行
- 19.4.4 缩进
- 19.5 本章小结
- 19.6 同步练习
- 第20章 SWIFT内存管理
- 20.1 Swift内存管理概述
- 20.1.1 引用计数
- 20.1.2 示例:Swift自动引用计数
- 20.2 强引用循环
- 20.3 打破强引用循环
- 20.3.1 弱引用
- 20.3.2 无主引用
- 20.4 闭包中的强引用循环
- 20.4.1 一个闭包中的强引用循环示例
- 20.4.2 解决闭包强引用循环
- 20.5 本章小结
- 20.6 同步练习
- 第21章 错误处理
- 21.1 Cocoa错误处理模式
- 21.2 do-try-catch错误处理模式
- 21.2.1 捕获错误
- 21.2.2 错误类型
- 21.2.3 声明抛出错误
- 21.2.4 在函数或方法中抛出错误
- 21.2.5 try 和try!的使用区别
- 21.3 案例:MyNotes应用数据持久层实现
- 21.3.1 MyNotes应用介绍
- 21.3.2 MyNotes应用数据持久层设计
- 21.3.3 实现Note实体类
- 21.3.4 NoteDAO代码实现
- 21.3.5 使用defer语句释放资源
- 21.3.6 测试示例
- 21.4 本章小结
- 21.5 同步练习
- 第22章 FOUNDATION框架
- 22.1 数字类NSNumber
- 22.1.1 获得NSNumber对象
- 22.1.2 比较NSNumber对象
- 22.1.3 数字格式化
- 22.1.4 NSNumber与Swift原生数字类型之间的桥接
- 22.2 字符串类
- 22.2.1 NSString类
- 22.2.2 NSMutableString类
- 22.2.3 NSString与String之间的桥接
- 22.3 数组类
- 22.3.1 NSArray类
- 22.3.2 NSMutableArray类
- 22.3.3 NSArray与Swift原生数组之间的桥接
- 22.4 字典类
- 22.4.1 NSDictionary类
- 22.4.2 NSMutableDictionary类
- 22.4.3 NSDictionary与Swift原生字典之间的桥接
- 22.5 NSSet集合类
- 22.5.1 NSSet类
- 22.5.2 NSMutableSet类
- 22.5.3 NSSet与Swift原生Set之间的桥接
- 22.6 文件管理
- 22.6.1 访问目录
- 22.6.2 目录操作
- 22.6.3 文件操作
- 22.7 字节缓存
- 22.7.1 访问字节缓存
- 22.7.2 示例:Base64解码与编码
- 22.8 日期与时间
- 22.8.1 NSDate和Date
- 22.8.2 日期时间格式化
- 22.8.3 NSCalendar、Calendar、NSDateComponents和DateComponents
- 22.8.4 示例:时区转换
- 22.9 使用谓词NSPredicate过滤数据
- 22.9.1 一个过滤员工花名册的示例
- 22.9.2 使用谓词NSPredicate
- 22.9.3 NSPrdicate与集合
- 22.9.4 格式说明符
- 22.9.5 运算符
- 22.10 使用正则表达式
- 22.10.1 在NSPredicate中使用正则表达式
- 22.10.2 使用NSRegularExpression
- 22.10.3 示例:日期格式转换
- 22.11 本章小结
- 第23章 SWIFT与OBJECTIVE-C混合编程
- 23.1 选择语言
- 23.2 文件扩展名
- 23.3 Swift与Objective-C API映射
- 23.3.1 构造函数映射
- 23.3.2 方法名映射
- 23.4 同一应用目标中的混合编程
- 23.4.1 什么是目标
- 23.4.2 Swift调用Objective-C
- 23.4.3 Objective-C调用Swift
- 23.5 同一框架目标中的混合编程
- 23.5.1 链接库和框架
- 23.5.2 Swift调用Objective-C
- 23.5.3 测试框架目标
- 23.5.4 Objective-C调用Swift
- 23.6 本章小结
- 第24章 SWIFT与C/C++混合编程
- 24.1 数据类型映射
- 24.1.1 C语言基本数据类型
- 24.1.2 C语言指针类型
- 24.2 应用目标中的混合编程
- 24.2.1 Swift调用C API
- 24.2.2 Swift调用C++ API
- 24.3 框架目标中的混合编程
- 24.3.1 同一框架目标中Swift调用C或C++ API
- 24.3.2 Swift调用第三方库中的C或C++ API
- 24.4 案例:用SQLite嵌入式数据库实现MyNotes数据持久层
- 24.4.1 Note实体类代码
- 24.4.2 创建表
- 24.4.3 插入数据
- 24.4.4 查询数据
- 24.4.5 应用沙箱目录
- 24.4.6 表示层开发
- 24.5 本章小结
- 第25章 SPRITEKIT游戏引擎
- 25.1 移动平台游戏引擎介绍
- 25.2 第一个SpriteKit游戏
- 25.2.1 创建工程
- 25.2.2 工程剖析
- 25.3 一切都是节点
- 25.3.1 节点“家族”
- 25.3.2 节点树
- 25.3.3 节点中重要的方法
- 25.3.4 节点中重要的属性
- 25.4 精灵
- 25.4.1 精灵类SKSpriteNode
- 25.4.2 案例:沙漠英雄场景
- 25.4.3 使用纹理图集性能优化
- 25.5 场景切换
- 25.5.1 场景切换方法
- 25.5.2 场景过渡动画
- 25.5.3 案例:沙漠英雄场景切换
- 25.6 动作
- 25.6.1 常用动作
- 25.6.2 组合动作
- 25.6.3 案例:帧动画实现
- 25.7 粒子系统
- 25.7.1 粒子系统属性
- 25.7.2 内置粒子系统模板
- 25.8 游戏音乐与音效
- 25.8.1 音频文件介绍
- 25.8.2 macOS和iOS平台音频优化
- 25.8.3 背景音乐
- 25.8.4 3D音效
- 25.9 物理引擎
- 25.9.1 物理引擎核心概念
- 25.9.2 物理引擎中的物体
- 25.9.3 接触与碰撞
- 25.9.4 案例:食品的接触与碰撞
- 25.10 本章小结
- 第26章 游戏APP实战——迷失航线
- 26.1 《迷失航线》游戏分析与设计
- 26.1.1 《迷失航线》故事背景
- 26.1.2 需求分析
- 26.1.3 原型设计
- 26.1.4 游戏脚本
- 26.2 任务1:游戏工程的创建与初始化
- 26.2.1 迭代1.1:创建工程
- 26.2.2 迭代1.2:自定义类型维护
- 26.2.3 迭代1.3:添加资源文件
- 26.2.4 迭代1.4:添加粒子系统
- 26.3 任务2:创建Loading场景
- 26.3.1 迭代2.1:设计场景
- 26.3.2 迭代2.2:Loading动画
- 26.3.3 迭代2.3:预处理加载纹理
- 26.4 任务3:创建Home场景
- 26.4.1 迭代3.1:设计场景
- 26.4.2 迭代3.2:实现代码
- 26.5 任务4:创建设置场景
- 26.5.1 迭代4.1:设计场景
- 26.5.2 迭代4.2:实现代码
- 26.6 任务5:创建帮助场景
- 26.6.1 迭代5.1:设计场景
- 26.6.2 迭代5.2:实现代码
- 26.7 任务6:实现游戏场景
- 26.7.1 迭代6.1:设计场景
- 26.7.2 迭代6.2:创建敌人精灵
- 26.7.3 迭代6.3:创建玩家飞机精灵
- 26.7.4 迭代6.4:创建子弹精灵
- 26.7.5 迭代6.5:初始化游戏场景
- 26.7.6 迭代6.6:玩家移动飞机
- 26.7.7 迭代6.7:游戏循环与任务调度
- 26.7.8 迭代6.8:游戏场景菜单实现
- 26.7.9 迭代6.9:玩家飞机发射子弹
- 26.7.10 迭代6.10:子弹与敌人的碰撞检测
- 26.7.11 迭代6.11:玩家飞机与敌人的碰撞检测
- 26.8 任务7:游戏结束场景
- 26.8.1 迭代7.1:设计场景
- 26.8.2 迭代7.2:实现代码
- 26.9 还有“最后一公里”
- 26.9.1 添加图标
- 26.9.2 调整Identity和Deployment Info属性
- 26.9.3 调整程序代码
- 26.10 本章小结