新書推薦:
《
中国古代文体形态研究(第四版)(中华当代学术著作辑要)
》
售價:HK$
172.5
《
朋党之争与北宋政治·大学问
》
售價:HK$
102.4
《
甲骨文丛书·波斯的中古时代(1040-1797年)
》
售價:HK$
90.9
《
以爱为名的支配
》
售價:HK$
64.4
《
台风天(大吴作品,每一种生活都有被看见的意义)
》
售價:HK$
55.2
《
打好你手里的牌(斯多葛主义+现代认知疗法,提升当代人的心理韧性!)
》
售價:HK$
66.1
《
新时代硬道理 广东寻路高质量发展
》
售價:HK$
79.4
《
6S精益管理实战(精装版)
》
售價:HK$
103.3
編輯推薦:
面向协议编程包含了Swift标准库的核心思想,为代码的健壮性和灵活性提供了良好的支持。
本书由浅入深,详细阐述了如何面向协议编程,实例丰富,值得一读。
內容簡介:
Swift 2.0版本之后,Swift已经正式成为一门面向协议编程的语言,但无论是行业内的从业者还是行业外的初学者,对面向协议编程的概念都很陌生,因此本书的内容围绕"面向协议编程这一核心思想展开。*章是IDE以及Swift历史的简单介绍,第二章涵盖Swift的入门语法,第三章为Swift的进阶语法,涉及函数式编程思想、面向协议编程的基础理论以及Swift的内存优化,帮助读者建立面向协议编程的意识。第四章为iOS开发快速入门,帮助初学者了解iOS开发中的MVC模式以及一些常用操作,希望读者能通过实战环节快速消化Swift语法。*后一章重点介绍Swift面向协议编程的工程细节。
關於作者:
陈刚,国内第一批Swift爱好者,有上万行Swift代码编程经验,CSDN博客专家。任职于好未来教育科技有限公司爱智康事业部,职业iOS工程师。
目錄 :
目录
第1 章 搭建Swift 开发环境 ........................................................................................................ 1
1.1 Swift 介绍 .......................................................................................................................... 1
1.1.1 Swift 的前世今生 .................................................................................................. 1
1.1.2 Swift 与Objective-C ............................................................................................. 3
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
2.1.4 注释 ..................................................................................................................... 10
2.1.5 输出常量和变量 .................................................................................................. 10
2.2 基本数据类型 .................................................................................................................. 12
2.2.1 整数 ..................................................................................................................... 12
VIII Swift:面向协议编程
2.2.2 浮点数 ................................................................................................................. 12
2.2.3 布尔类型 ............................................................................................................. 12
2.2.4 元组类型 ............................................................................................................. 13
2.2.5 可选型 ................................................................................................................. 14
2.3 基本运算符 ...................................................................................................................... 17
2.3.1 赋值运算符.......................................................................................................... 17
2.3.2 数值运算 ............................................................................................................. 17
2.3.3 自增和自减运算 .................................................................................................. 18
2.3.4 复合赋值 ............................................................................................................. 18
2.3.5 比较运算 ............................................................................................................. 18
2.3.6 三元运算符.......................................................................................................... 19
2.3.7 逻辑运算符.......................................................................................................... 19
2.3.8 范围 ..................................................................................................................... 20
2.3.9 括号优先级.......................................................................................................... 20
2.4 字符串与字符 .................................................................................................................. 21
2.5 集合类型 .......................................................................................................................... 25
2.5.1 数组 ..................................................................................................................... 26
2.5.2 集合 ..................................................................................................................... 29
2.5.3 字典 ..................................................................................................................... 30
2.6 控制流 .............................................................................................................................. 32
2.6.1 for 循环 ................................................................................................................ 32
2.6.2 while 循环 ............................................................................................................ 33
2.6.3 if 判断语句 .......................................................................................................... 34
2.6.4 guard 判断语句 ................................................................................................... 34
2.6.5 switch 开关语句 .................................................................................................. 35
2.7 函数.................................................................................................................................. 38
2.8 闭包.................................................................................................................................. 45
2.9 Swift 三杰类、结构体、枚举 ................................................................................ 48
2.9.1 Swift 三杰简介 .................................................................................................... 48
2.9.2 值引用与类型引用 .............................................................................................. 49
2.9.3 类 ......................................................................................................................... 50
2.9.4 结构体 ................................................................................................................. 51
2.9.5 枚举 ..................................................................................................................... 52
目录 IX
2.10 属性................................................................................................................................ 54
2.10.1 存储属性 ........................................................................................................... 54
2.10.2 计算属性 ........................................................................................................... 55
2.10.3 属性观察器........................................................................................................ 60
2.10.4 类型属性 ........................................................................................................... 61
2.11 方法................................................................................................................................ 62
2.12 下标................................................................................................................................ 65
2.13 继承...............................................................................
內容試閱 :
推荐序
很高兴因为认识陈刚这位优秀的朋友,有幸让自己的文字能够呈现在读者面前,每一个字都显得很珍贵。
这是一本介绍 Swift 语言的书。说起编程语言,这些年也广泛地涉猎过诸多语言。从初中时开始接触 VB,写一些小程序,然后发送给朋友们。那时的 VB 看起来就像数学公式一样。现在回头一看,可视化的界面编辑也正像 Xcode 的 Interface Builder 一样。到后来接触了算法竞赛,开始写一些Pascal,告别了图形化界面,在 Turbo Pascal 的蓝屏背景下写一些begin、end、readln、writeln。后来去外面参加竞赛,考卷有三种语言选择:Pascal、C、C。当大部分人用 Pascal 的时候,有少数几个人用 C、C考试,而监考老师发卷到他们那里的时候也会说好厉害。于是潜意识中,觉得 C、C 是比 Pascal 更加厉害的语言。于是学了一年Pascal 的我再度归零,拿起了谭浩强老师编写的《C 程序设计》。C 语言让我感觉很简洁,同时接触了指针、内存管理、字符串库。比起 Pascal,C 代码让我觉得是那样简洁、优雅。每一个字符都有它的力量,无法去掉、无法再简洁了。用它来写深度搜索、图论、二叉树算法,然后去在线评测系统提交代码,再优化优化,接着代码效率能上排名榜的第一页,是一个15 岁少年所能期待的最美好的事情。
接着读起了刘汝佳前辈的《算法竞赛入门经典》一书,感慨语言之上,还能实现那么多算法,解决一个又一个的问题。就像这本书一样,前面的语言章节仅是铺垫,后面的 iOS 开发章节才是高潮。精通一门语言,然后用它去开发各种灿烂的iOS 应用,才是高潮。
算法陪我度过了高中。高考之后,我读了《黑客与画家》一书,对 Lisp 语言崇拜不已,于是就学了 Lisp。在2013 年到 2015 年,又陆续学了 Java、Clojure、JavaScript、Objective-C 和Swift。
IV Swift:面向协议编程
后来创业做 Reviewcode.cn,又学了PHP、 CSS 和 HTML。开始更多地知道后端系统里,语言起着怎样的作用。后来到了新公司,担任 Go 后端工程师。又在一个星期内学了 Go,并用它做了抢发红包、充值的 API 接口,协调移动端同时上线了。
当用过很多语言后,你会发现很容易上手一门新语言,并快速用来干活。最近我也重新起航创业了,创立了趣直播一个知识直播平台,孙源Sunny、iOS 程序猿都来直播过,可到我们的公众号平方根平台来看看,也可加我的微信lzwjava来交流产品或技术。
初识Swift 的原因是公司准备把 Objective-C 示例应用用Swift 重写。重写是件挺无聊的事情,于是只重写了觉得有趣的部分,其他代码都用GitHub 上的Objective-C 转 Swift 的程序先转一遍,然后再去修复。将Objective-C 自动转成Swift,在Swift 1.0 版本时还很好用,不用修复。可惜我当时用的时候,已经是Swift 1.2 版本了。算是给本书提供了一个 Swift 语法多变的真实例子吧。后来用 Swift 做了微图项目,旨在模仿国外的 imgur,展示互联网上最热门的图,接触到了extension、protocal、enum。再后来尝试用 Swift 写了一个 HTML Parser,比如从一大堆 HTML中解析 class="btn-blue" 的 div 出来, 从而对 Swift 字符串处理、错误处理、AnyObject 有了更深入的了解。
Swift 中的 map、flatMap、filter,这些是 Lisp 系语言函数的基础,通常用它们来构造更高阶的函数。比如下面的clojure 代码片段,从 map 中获取 values 对应的keys:
let [m {:x 1 :y 2 :z 3}
vset #{2 3}]
map first filter comp vset last m
;;=> :y :z
很高兴 Swift 有这么多函数式的语法支持,函数式语言很擅长处理数据转换,很优雅也很强大,想想上面的几行代码用其他语言实现需要多写多少代码吧?
我是早前于 SwiftGG 的一次聚餐中认识作者陈刚兄的,后续时有交流。虽然不能经常见面,但互相欣赏、惺惺相惜。希望未来有机会和陈刚兄一起共事。
本书通读下来,不禁对陈刚兄做事的认真感到佩服。相信他能带领大家进入 Swift 的世界,掌控这门语言,写出各种灿烂的应用!
趣直播创始人 李智维
前言
众所周知,在2015 年的 WWDC 上,苹果发布了 Swift 语言的 2.0 版本,并且正式宣布 Swift成为一门面向协议编程的语言。作为一个从 2014 年就开始接触Swift 的程序员,我在当时已经具备了一定的 Swift 面向对象编程经验,这些经验帮助我顺利地完成了工程的更新;同样,这些经验也让我变得迟钝。在 2.0 版本发布之初,面向协议编程这个名词就好像一滴水滴入了大海中,从我的关注中溜走了。好在我是个对知识充满敬意的人,此后的数月中,我都在重点研究 WWDC2015 的视频资料,此时我才惊奇地发现,最初的那滴水变成了我心头的惊涛骇浪,我开始不断地思考与探索面向协议编程的含义。
那么面向协议编程到底是什么呢?一句话就能概括:用协议扩展的方式代替继承,实现代码复用。这个代替的影响是深远的,协议扩展使得值类型在保持原有特性的同时,也能和引用类型一样实现代码的复用。定长的值类型保存在栈内存上,值类型没有引用计数、不会被共享、只需用常数时间就能完成一次复制,等等,这些特性使得值类型相比引用类型拥有更快的读写速度。同时,值类型的方法可以在编译期进行内联优化,更多的值类型意味着更大的优化空间。Swift 不但通过协议扩展的方式填补了传统面向对象编程语言中值类型代码复用的鸿沟,同时应用 Copy-on-Write 技术还可免于陷入绝对复制带来的性能问题。在 Swift 的代码世界中,值类型得到了空前的解放。如果你正在使用 Swift 3.0 版本,那么你应该已经发现了,那些摘掉了NS前缀的 Swift 原生对象,大部分都变成了值类型,毫无疑问,这种演变在后续的版本中还会继续进行下去。所以从内存的角度来看,面向协议编程正朝着面向栈内存编程的方向前进。
这本书诞生于我在重新研究 WWDC 2015 视频的阶段,我所编著的《Swift 开发手册:技巧与实战》首印即将售罄,该书的责编安娜(也是本书的责编)与我商讨重印的细节。受写作时Swift版本的影响,《Swift 开发手册:技巧与实战》是一本面向对象编程的教材;所以在深思熟虑之后,我决定放弃该书的重印,重新创作一本面向协议编程的教材,也就是你现在看到的《Swift:面向协议编程》。在本书的创作过程中,我保留了旧作中的部分目录和示例,加入了我对 WWDC 2015以及 WWDC 2016 重新研究后的心得体会、个人在工作中的面向协议编程实战经验以及对编程模式的思考。Swift 开源之后,除了可以在 iOS 平台应用外,在其他平台也有强劲表现,所以本书的内容编排侧重于语言本身及编程方式的思考,弱化了 iOS 开发的教学。由于本书的创作时间比较久,所以主体内容是基于 Swift 2.2 版本创作的。在 Swift 3.0 版本发布之后,我第一时间投身到新版本的学习中,在本书的第二次排版时加入了 Swift 3.0 的改动,力争做到全面和准确。可以预见,3.0 版本不会是 Swift 的最后一个版本,所以请读者在学习时以当前的语言版本做参考。
最后感谢电子工业出版社的编辑安娜为本书所做的付出,多次合作我们已经建立了深厚友谊与足够的默契。感谢公司对我的信任,让我如愿以偿地成为了一名职业 iOS 开发者,获得了很多应用 Swift 的机会。感谢智维,创业辛苦仍不失对技术的热情,在百忙中抽出时间帮我写序,祝趣直播越做越好。感谢帮我写书评的王巍大神、InfoQ 主编徐川老师、还有圈内好友RxSwift 大神小青和SwiftGG 翻译组的前辈羊叔,你们的支持是我前进的动力,同时也感谢唐巧、付若愚和李明杰三位老师的关注。感谢师父时永昌对我的关怀和指导,感谢和我合作开发第一个 Swift 项目的同事杨帅以及同组的所有同事,感谢帮我纠错的同事蒙朦,感谢共同学习进步的其他TStar 们(白建国、薛刚、施洁、邓飞)。
为了更好地解答读者疑问,第一时间分享Swift 心得,我开通了微信订阅号:SwiftTime 雨燕时光,欢迎读者订阅交流。
走心的Swift 翻译组地址:http:swift.gg。
CSDN 个人博客地址:http:blog.csdn.netcg1991130。
本书第4 章和第5 章的 Demo 地址:https:pan.baidu.coms1gfMC7RX。