
全书分为7章,第1章介绍了与iOS开发环境搭建有关的知识点。第2章是Swift基础语法,基于Swift 1.2正式版本。第3章是Swift进阶语法,除了有难度的语法点之外,还加入了Swift 2.0正式版本的语法改动与新特性。第4章是作者根据斯坦福大学iOS 8公开课的计算器项目进行改进的计算器项目,通过这个简单的项目介绍了Xcode的基本用法和在iOS开发中的重要概念——MVC模式。第5章介绍了iOS中的重要内容UIKit框架,涵盖了UIKit中常用的控件,并通过丰富的实例展示了每一个控件的用法,第5章的最后几节介绍了iOS 9中的新成员,并详细讲解了何如使用AutoLayout对页面元素进行布局。第6章介绍了iOS系统API的用法,全部基于Xcode 7.0正式版,使用Swift 2.0语法。第7章是作者精心挑选的一些帮助贴士。
前言 首先感谢您购买本书,这可能是您读到的最不像“前言”的前言。作为本书的作者,我并不 想向您灌输Swift 这门语言是多么优秀多么有潜力这样的鸡汤,我想要分享的是作为一名Swifter 收获的成长与乐趣。 天意渐凉,年关将至,Swift 已经悄然走过了它的第一个年头,从1.0 版本的毛头小孩成长为 2.0 版本的坚毅少年。和许多有资历的作者不同,Swift 是我的iOS 入门语言,原来的我是个真正 的菜鸟。 2014 年的深冬,我躲在温暖的咖啡馆中,打开Playground 小心翼翼地敲下一行“Hello,Swift!”, 从此这个世界上又多了一个Swifter。和所有尝试新技术的程序员一样,最初的经历并不是一帆风 顺的,每个版本都有不小的语法改动,Xcode 6 经常莫名出错,国内的资料十分匮乏,我买光了市 面上能买到的所有Swift 图书,不幸的是有些作者喜欢拿贴着Swift 标签的新瓶子装一些旧酒。不 久我迎来了那个学期的寒假,这是提升编程能力的好时机。那个寒假微信红包在疯狂地刷屏,而 我在疯狂地使用Swift 编写着各种小程序,连我的父母都惊讶于我的变化,我想这大概就是Swift 的魔力。假期结束我第一次尝试使用纯粹的Swift 开发作品去参加竞赛,因为团队人手不足还自学 了Sketch,自己动手制作UI 素材,最终获得了不错的成绩,这让我很受鼓舞。之后接触了越来越 多的英文资料,连我弱项之一的英语水平也有了很大提高。再之后只身前往北京的创业团队实习, 应聘季拿到了满意的offer,业余时间还能接一些iOS 开发的私活赚点零花钱,我想这些机会与我 Swift 开发手册:技巧与实战 IV 努力学习Swift 是分不开的。2015 年4 月份的时候电子工业出版社的安娜编辑通过我的CSDN 博 客联系到我,向我发出了约稿的邀请,让我感到受宠若惊,这是本书的由来。 我用了大概半年的时间完成了这本书的初稿,在最初的一个月里我主要的工作是编排目录, 针对我自己在学习过程中遇到的那些坑,我希望本书的目录能尽可能地适合初学者,避免在基础 章节有超前的知识点,建议初学者按章节阅读,通过渐进学习的方式去掌握本书的知识点。对于 那些有经验的开发者,本书的知识点较为全面,版本也比较贴近目前日常开发所使用的版本,可 以作为一个备忘手册,在遇到某些易错或者不易记忆的API 时,我本人也时常翻阅此书。 全书分为 7 章,第1 章介绍了与iOS 开发环境搭建有关的知识点。第2 章是Swift 基础语法, 基于Swift 1.3 正式版本。第3 章是Swift 进阶语法,除了有难度的语法点之外,还加入了Swift 2.0 正式版本的语法改动与新特性,如果你对Swift 1.3 版本的语法已足够熟悉,可以直接翻看3.9 小 节。第4 章是作者根据斯坦福大学iOS 8 公开课的计算器项目进行改进的计算器项目,通过这个 简单的项目介绍了Xcode 的基本用法和在iOS 开发中的重要概念——MVC模式。第5 章介绍了iOS 中的重要内容UIKit 框架,涵盖了UIKit 中常用的控件,并通过丰富的实例展示了每一个控件的用 法,第5 章的最后几节介绍了iOS 9 中的新成员,并详细讲解了何如使用AutoLayout 对页面元素 进行布局。第6 章介绍了iOS 系统API 的用法,全部基于Xcode 7.0 正式版,使用Swift 2.0 语法。 如果本书的知识点不能为您提供帮助,希望本书最后一章精心挑选的一些帮助贴士可以帮助到您。 最后,感谢父母的鼓励与支持,感谢我的舍友加竞赛队友王探云、汤闻达两位同学,感谢在 “厅客”实习时刑淇翔、蔡清茂两位学长对我的照顾和夏凡对我在技术上的指导,感谢1+1+果汁 店的老板朱哥和墨点咖啡的老板老郭、大可为我提供了写作的场地,感谢好未来教育集团对我的 青睐与厚望,感谢北京随身移动公司对本书的大力支持。
目录 第1章 搭建Swift开发环境 ........................................................................................................... 1 1.1 Swift 语言介绍 .......................................................................................................................... 1 1.1.3 Swift 语言的前世今生 .................................................................................................. 1 1.1.2 Swift 与Objective - C ................................................................................................... 2 1.2 Mac OS X 操作系统 .................................................................................................................. 3 1.3 Xcode 简介和获取方法 ............................................................................................................ 4 1.3.1 Xcode 简介 .................................................................................................................... 4 1.3.2 Playground 简介 ............................................................................................................ 4 1.3.3 Xcode 的获取方法 ........................................................................................................ 5 1.4 iphone SDK 简介 ....................................................................................................................... 6 第2章 Swift基础语法 ................................................................................................................... 7 2.1 基础知识................................................................................................................................... 7 2.1.1 命名规则 ....................................................................................................................... 7 2.1.2 常量与变量 ................................................................................................................... 8 2.1.3 类型推测 ....................................................................................................................... 9 Swift 开发手册:技巧与实战 II 2.1.4 注释 ............................................................................................................................. 10 2.1.5 输出常量和变量 ......................................................................................................... 10 2.2 基本数据类型 .......................................................................................................................... 11 2.2.1 整数 ............................................................................................................................. 11 2.2.2 浮点数 ......................................................................................................................... 11 2.2.4 元组类型 ..................................................................................................................... 12 2.2.5 可选型 ......................................................................................................................... 13 2.3 基本运算符 .............................................................................................................................. 15 2.3.1 赋值运算符 ................................................................................................................. 15 2.3.2 数值运算 ..................................................................................................................... 15 2.3.3 自增和自减运算 ......................................................................................................... 16 2.3.4 复合赋值 ..................................................................................................................... 16 2.3.5 比较运算 ..................................................................................................................... 16 2.3.6 三元运算符 ................................................................................................................. 16 2.3.7 逻辑运算符 ................................................................................................................. 17 2.3.8 范围 ............................................................................................................................. 17 2.3.9 括号优先级 ................................................................................................................. 18 2.4 字符串与字符 .......................................................................................................................... 18 2.5 集合类型................................................................................................................................. 22 2.5.1 数组 ............................................................................................................................. 22 2.5.2 集合 ............................................................................................................................. 25 2.5.3 字典 ............................................................................................................................. 26 2.6 控制流 .................................................................................................................................... 27 2.6.1 For 循环 ....................................................................................................................... 27 2.6.2 while 循环 .................................................................................................................... 28 2.6.3 If 判断语句 .................................................................................................................. 29 2.6.4 Switch 开关语句 ......................................................................................................... 29 2.7 函数 ........................................................................................................................................ 31 2.7 闭包 ........................................................................................................................................ 34 2.9 Swift 三杰——类、结构体、枚举 ........................................................................................ 37 2.9.1 Swift 三杰简介 ............................................................................................................ 37 2.9.2 值引用与类型引用 ...................................................................................................... 38 2.9.3 类 ................................................................................................................................ 38 2.9.4 结构体 ......................................................................................................................... 39 目录 III 2.9.5 枚举 ............................................................................................................................. 40 2.10 属性 ........................................................................................................................................ 41 2.10.1 存储属性 ................................................................................................................... 41 2.10.2 计算属性 ................................................................................................................... 42 2.10.3 属性观察器 ............................................................................................................... 44 2.10.4 类型属性 ................................................................................................................... 45 2.11 方法 ........................................................................................................................................ 46 2.12 下标 ........................................................................................................................................ 49 2.13 继承 ........................................................................................................................................ 51 2.14 构造与析构 .............................................................................................................................. 53 2.14.1 构造器 ....................................................................................................................... 54 2.14.2 析构器 ....................................................................................................................... 57 2.15 类型检查与类型转换 .............................................................................................................. 58 2.15.1 类型检查 ................................................................................................................... 59 2.15.2 类型转换 ................................................................................................................... 60 2.16 类型嵌套................................................................................................................................. 61 2.17 扩展 ........................................................................................................................................ 62 2.17.1 扩展计算属性 ........................................................................................................... 62 2.17.2 扩展构造器 ............................................................................................................... 63 2.17.3 扩展方法 ................................................................................................................... 63 2.17.4 扩展下标 ................................................................................................................... 64 2.18 协议 ........................................................................................................................................ 64 2.18.1 声明协议 ................................................................................................................... 64 2.18.2 遵守协议 ................................................................................................................... 66 2.18.3 实现协议 ................................................................................................................... 66 2.19 泛型 ........................................................................................................................................ 66 2.20 断言 ........................................................................................................................................ 67 第3章 Swit进阶语法 .................................................................................................................. 69 3.1 再谈可选型 .............................................................................................................................. 69 3.1.1 可选型 ......................................................................................................................... 69 3.1.2 为什么要用可选型 ...................................................................................................... 70 3.1.3 解包可选型 ................................................................................................................. 71 Swift 开发手册:技巧与实战 IV 3.1.4 可选绑定 ..................................................................................................................... 72 3.1.5 可选链 ......................................................................................................................... 73 3.2 AnyObject ............................................................................................................................... 74 3.2.1 AnyObject 简介 ........................................................................................................... 74 3.2.2 AnyObject 的使用 ....................................................................................................... 74 3.3 几个数组相关的实用函数 ...................................................................................................... 76 3.3.1 filter 函数 ..................................................................................................................... 76 3.3.2 map 函数...................................................................................................................... 76 3.3.3 reduce 函数 .................................................................................................................. 78 3.3.4 sort 函数 ...................................................................................................................... 78 3.3.5 contains 函数 ............................................................................................................... 78 3.3.6 find 函数 ...................................................................................................................... 78 3.4 Objective – C 兼容性 .............................................................................................................. 79 3.5 ARC 自动引用计数 ................................................................................................................ 80 3.5.1 ARC 原理 .................................................................................................................... 80 3.5.2 循环强引用 ................................................................................................................. 82 3.5.3 弱引用与无主引用 ...................................................................................................... 83 3.6 带下标的遍历 .......................................................................................................................... 84 3.6.1 C 语言风格的for 循环 ............................................................................................... 84 3.6.2 快速遍历 ..................................................................................................................... 84 3.6.3 enumerateObjectsUsingBlock ...................................................................................... 85 3.6.4 enumerate ..................................................................................................................... 85 3.7 方法参数的语法甜头 .............................................................................................................. 85 3.7.1 可变参数 ..................................................................................................................... 85 3.7.2 柯里化 ......................................................................................................................... 86 3.8 闭包的“延迟调用”特性 ...................................................................................................... 88 3.9 Swift 2.0 新特性详解 .............................................................................................................. 90 3.9.1 println 简化为print ..................................................................................................... 90 3.9.2 do-while 更名为repeat-while ..................................................................................... 91 3.9.3 where 关键字 ............................................................................................................... 91 3.9.4 if-case 结构 .................................................................................................................. 91 3.9.5 guard 关键字 ............................................................................................................... 92 3.9.6 错误处理 ..................................................................................................................... 93 3.9.7 LLVM 与泛型特化 ..................................................................................................... 96 目录 V 3.9.8 Protocol Extensions ..................................................................................................... 97 3.9.9 API 的可用性检查 ...................................................................................................... 98 3.9.10 String 与NSString 言归于好 .................................................................................... 99 3.9.11 总结 ......................................................................................................................... 100 第4章 IOS开发中的MVC模式 ................................................................................................. 101 4.1 IOS 系统初探 ........................................................................................................................ 101 4.1.1 核心OS 层 ................................................................................................................ 102 4.1.2 核心服务层 ............................................................................................................... 102 4.1.3 媒体层 ....................................................................................................................... 103 4.1.4 Cocoa Touch .............................................................................................................. 103 4.2 MVC 模式 ............................................................................................................................. 103 4.2.1 MVC 简介 ................................................................................................................. 103 4.2.2 IOS 中的MVC .......................................................................................................... 103 4.3 新建一个Swift 工程 ............................................................................................................. 106 4.4 认识Interface Builder ........................................................................................................... 110 4.5 构建计算器界面 .................................................................................................................... 113 4.5.1 使用对象库中的对象 ................................................................................................ 114 4.5.2 使用检查器设置对象 ................................................................................................ 115 4.5.3 尝试运行程序 ........................................................................................................... 116 4.5.4 添加约束 ................................................................................................................... 118 4.5.5 关联代码 ................................................................................................................... 121 4.5.6 完善按键 ..................................................................................................................... 126 4.6 实现计算器逻辑 .................................................................................................................... 127 4.6.1 补全键盘 ..................................................................................................................... 128 4.6.2 给键盘添加约束 ......................................................................................................... 129 4.6.3 实现数字显示功能...................................................................................................... 132 4.6.4 实现运算逻辑 ............................................................................................................. 134 4.7 修改计算器为MVC 模式 ..................................................................................................... 136 4.8 NSNotification ....................................................................................................................... 138 4.8.1 NSNotification 简介 .................................................................................................. 138 4.8.2 addObserver 方法 ...................................................................................................... 139 4.8.3 addObserverForName 方法 ....................................................................................... 142 Swift 开发手册:技巧与实战 VI 4.8.4 postNotification 方法 ................................................................................................. 143 第5章 掌控UIKit ...................................................................................................................... 144 5.1 本地化 .................................................................................................................................. 144 5.2 视图View .............................................................................................................................. 146 5.3 生命周期............................................................................................................................... 150 5.3.1 APP 的生命周期 ....................................................................................................... 150 5.3.2 控制器的生命周期 .................................................................................................... 151 5.4 Button(按钮) ..................................................................................................................... 152 5.4.1 按钮属性检查器 ....................................................................................................... 153 5.4.2 按钮的代码实现 ....................................................................................................... 154 5.4.3 为按钮添加事件 ....................................................................................................... 156 5.5 Label(标签) ...................................................................................................................... 157 5.5.1 Label 的属性检查器 ................................................................................................. 158 5.5.2 Label 的代码实现 ..................................................................................................... 159 5.6 TextField(文本框) ............................................................................................................ 160 5.6.1 TextField 的属性检查器 ........................................................................................... 161 5.6.2 TextField 的代码实现 ............................................................................................... 163 5.6.3 键盘 ........................................................................................................................... 164 5.7 Switch(开关) .................................................................................................................... 164 5.8 Segmented Control(分段控件) ......................................................................................... 166 5.5.1 Segmented Control 的属性检查器 ............................................................................ 167 5.5.2 Segmented Control 的代码实现 ................................................................................ 168 5.5.3 “按钮”还是“分段” ............................................................................................ 169 5.9 Slider(滑块) ...................................................................................................................... 170 5.9.1 Slider 的属性观察器 ................................................................................................. 170 5.9.2 Slider 的代码实现 ..................................................................................................... 171 5.10 ProgressView&ActivityIndicatorView ................................................................................ 172 5.10.1 多线程入门 ............................................................................................................. 173 5.10.2 ProgressView ........................................................................................................... 174 5.10.3 ActivityIndicatorView(环形进度条) .................................................................. 176 5.11 Stepper(步进器) ............................................................................................................. 179 5.11.1 Stepper 属性检查器 ................................................................................................ 179 目录 VII 5.11.2 Stepper 的代码实现 ................................................................................................ 180 5.12 ImageView(图像控件) ................................................................................................... 181 5.12.1 UIImageView&UIImage ......................................................................................... 181 5.12.2 UIImageView 属性检查器 ...................................................................................... 183 5.12.3 UIImageView 的代码实现 ...................................................................................... 184 5.13 PickerView&DatePicker ...................................................................................................... 187 5.13.1 PickerView(选择器)简介 ................................................................................... 187 5.13.2 使用delegate 和dataSource .................................................................................... 188 5.13.3 PickerView 的代码实现 .......................................................................................... 191 5.13.4 DatePicker(日期选择器)的属性检查器 ............................................................ 193 5.13.5 DatePicker 的代码实现 ........................................................................................... 195 5.13.6 浅谈“Delegate pattern”委托模式 ....................................................................... 195 5.14 AlertView&ActionSheet ...................................................................................................... 196 5.14.1 AlertView ................................................................................................................. 196 5.14.2 ActionSheet(操作表) .......................................................................................... 200 5.14.3 更好的选择:UIAlertController ............................................................................. 201 5.15 多重MVC 及Segues(过渡) .......................................................................................... 205 5.15.1 多重MVC 与Segues 简介 ..................................................................................... 205 5.15.2 NavigationController(导航控制器) .................................................................... 209 5.15.3 Segues(过渡) ...................................................................................................... 216 5.15.4 SplitViewController ................................................................................................. 224 5.15.5 TabBarController ........................................................................................................ 226 5.15.6 PageViewController ................................................................................................. 233 5.16 Toolbar ................................................................................................................................ 240 5.16.1 Toolbar 的属性检查器 ............................................................................................ 241 5.17 ScrollView ........................................................................................................................... 243 5.17.1 ScrollView 简介 ...................................................................................................... 243 5.17.2 CGFloat、CGPoint、CGSize ................................................................................. 243 5.17.3 视图的坐标系统...................................................................................................... 244 5.17.4 ScrollView 实战 ...................................................................................................... 244 5.18 TableViewController ........................................................................................................... 247 5.18.1 UITabelView 简介 ................................................................................................... 247 5.18.2 UITableViewCell 简介 ............................................................................................ 250 5.18.3 TabelView 与cell 的交互 ....................................................................................... 251 Swift 开发手册:技巧与实战 VIII 5.19 SearchBar ............................................................................................................................. 256 5.19.1 SearchBar 的属性检查器 ........................................................................................ 256 5.19.2 实时显示搜索结果的SearchBar ............................................................................ 258 5.20 IOS 与Web .......................................................................................................................... 261 5.20.1 UIWebView ............................................................................................................. 261 5.20.2 WKWebView ........................................................................................................... 264 5.20.3 SFSafariViewController .......................................................................................... 265 5.21 AutoLayout&StackView ...................................................................................................... 267 5.21.1 AutoLayout .............................................................................................................. 267 5.21.2 UIStackView(堆栈视图) .................................................................................... 277 第6章 IOS开发揭秘 ................................................................................................................ 281 6.1 Gestures——手势 .................................................................................................................. 281 6.2 KVC 与API 设计 .................................................................................................................. 286 6.3 访问短信与电话API ............................................................................................................ 290 6.3.1 使用URL 访问短信与电话API .............................................................................. 290 6.3.2 MessageUI ................................................................................................................. 291 6.4 访问相册与相机API ............................................................................................................ 293 6.5 快速分享API .......................................................................................................................... 296 6.6 地图与定位API ...................................................................................................................... 301 6.7 网络通信................................................................................................................................. 311 6.7.1 网络通信初探 ............................................................................................................. 312 6.7.2 NSURLConnection 还是NSURLSession ................................................................. 313 6.8 数据持久化 .............................................................................................................................. 317 6.8.1 Archiving(归档) ................................................................................................... 318 6.8.2 File System(文件系统) ......................................................................................... 318 6.8.3 SQLite&Core Data ..................................................................................................... 321 6.9 多线程 .................................................................................................................................. 326 6.9.1 GCD ........................................................................................................................... 326 6.9.2 NSOperationQueue .................................................................................................... 329 6.10 Swifter 帮助贴士 ................................................................................................................. 331
陈刚:国内第一批Swift爱好者,有上万行Swift代码编程经验,CSDN博客Swift专栏写手,一直坚持采用纯粹的Swift语言进行APP开发,并用纯粹的Swift开发作品去参加竞赛,并获得了不错的成绩。