首页>参考读物>计算机科学与技术>软件与程序设计

iOS编程基础:Swift、Xcode和Cocoa入门指南
作者 : [美] 马特?诺伊贝格(Matt Neuburg)著
出版日期 : 2017-03-27
ISBN : 978-7-111-55635-0
定价 : 129.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 550
开本 : 16
原书名 : iOS 9 Programming Fundamentals with Swift
原出版社: O'Reilly Media USA
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

Swift成为学习iOS编程的一门优秀语言。其他选择Objective-C依然存在,如果你喜欢还可以使用它。实际上,编写一个同时包含Swift代码与Objective-C代码的应用是很容易的;有时也需要这么做。不过,Objective-C缺少Swift的一些优势。Objective-C在C之上增加了面向对象特性。因此,它只是部分面向对象的;它同时拥有对象与标量数据类型,其对象需要对应于一种特殊的C数据类型(指针)。其语法掌握起来很困难;阅读与编写嵌套的方法调用会让人眼花,它还引入了一些黑科技,如隐式的nil测试。其类型检查可以而且经常关闭,这会导致程序员犯错,将消息发送给错误的对象类型并导致程序崩溃。Objective-C使用了手工的内存管理;新引入的ARC(自动引用计数)减轻了程序员的一些负担,并且极大地降低了程序员犯错的可能性,不过错误依旧有可能发生,内存管理最终还是要靠手工来完成。

图书前言

2014年6月2日,苹果公司在WWDC大会最后宣布了一项令人震惊的公告:“我们开发了一门全新的编程语言。”开发者社区对此感到非常惊讶,因为他们已经习惯了Objective-C,因此开始怀疑苹果公司是否有能力将既有资产迁移过来。不过,这一次开发者社区错了。
Swift发布后,众多开发者立刻开始检视这门新语言:学习并批判它,决定是否该使用它。我的第一步就是将自己所有的iOS应用都转换为Swift;这足以说服我自己,虽然Swift有各种各样的缺点,但它值得每一个iOS编程新兵去掌握;自此以后,我的书都会假设读者使用的是Swift。
Swift语言从一开始的设计上就具备如下主要特性:
面向对象
Swift是一门现代化的、面向对象的语言。它是完全面向对象的:“一切皆对象。”
清晰
Swift易于阅读和编写,其语法糖很少,隐藏的捷径也不多。其语法清晰、一致且明确。
安全
Swift使用强类型,从而确保它知道(并且你也知道)在每一时刻每个对象引用都是什么类型的。
小巧
Swift是一门小巧的语言,提供了一些基本的类型与功能,除此之外别无其他。其他功能需要由你的代码,或你所使用的代码库(如Cocoa)来提供。
内存管理
Swift会自动管理内存。你很少需要考虑内存管理问题。
兼容于Cocoa
Cocoa API是由C和Objective-C编写的。Swift在设计时就明确保证可与大多数Cocoa API交互。
这些特性使得Swift成为学习iOS编程的一门优秀语言。
其他选择Objective-C依然存在,如果你喜欢还可以使用它。实际上,编写一个同时包含Swift代码与Objective-C代码的应用是很容易的;有时也需要这么做。不过,Objective-C缺少Swift的一些优势。Objective-C在C之上增加了面向对象特性。因此,它只是部分面向对象的;它同时拥有对象与标量数据类型,其对象需要对应于一种特殊的C数据类型(指针)。其语法掌握起来很困难;阅读与编写嵌套的方法调用会让人眼花,它还引入了一些黑科技,如隐式的nil测试。其类型检查可以而且经常关闭,这会导致程序员犯错,将消息发送给错误的对象类型并导致程序崩溃。Objective-C使用了手工的内存管理;新引入的ARC(自动引用计数)减轻了程序员的一些负担,并且极大地降低了程序员犯错的可能性,不过错误依旧有可能发生,内存管理最终还是要靠手工来完成。
最近向Objective-C增加或修订的特性(ARC、合成与自动合成、改进的字面值数组与字典的语法、块等)让Objective-C变得更加简单和便捷,不过这些修复也使语言变得更加庞大,甚至会引起困惑。由于Objective-C必须要包含C,因此其可扩展和修订的程度会受到限制。另一方面,Swift则是个全新的开始。如果你梦想完全修订Objective-C,从而创建一个更棒的Objective-C,那么Swift可能就是你所需要的。它将一个先进、合理的前端置于你与Cocoa Objective-C API之间。
因此,Swift就是本书通篇所使用的编程语言。不过,读者还需要对Objective-C(包括C)有所了解。Foundation与Cocoa API(这些内建的命令是你的代码一定会用到的,从而让iOS设备上的一切可以实现)依旧使用C与Objective-C编写。为了与它们进行交互,你需要知道这些语言需要什么。比如,为了在需要NSArray时可以传递一个Swift数组,你需要知道到底是什么对象可以作为Objective-C NSArray的元素。
因此,本书虽然不会讲解Objective-C,但我会对其进行足够充分的介绍,从而使你在文档和互联网上遇到这类问题时能够知道解决方案,我还会时不时地展示一些Objective-C代码。本书第三部分关于Cocoa的介绍会帮助大家以Objective-C的方式来思考——因为Cocoa API的结构与行为基本上是基于Objective-C的。本书最后的附录会详细介绍Swift与Objective-C之间的交互方式,同时还会介绍如何以Swift和Objective-C混合编程来编写应用。
本书范围
本书实际上是我的另一本书《Programming iOS 9》的配套参考书,该书以本书的结束作为起点。它们之间是互补的。我相信,这两本书的结构合理、内容通俗易懂。它们提供了开始编写iOS应用所需的完整基础知识;这样,在开始编写iOS应用时,你会对将要做的事情以及方向有着深刻的理解。如果编写iOS程序类似于用砖盖房子,那么本书将会介绍什么是砖以及如何使用它,而《Programming iOS 9》则会给你一些实际的砖并告诉你如何将其堆砌起来。
阅读完本书后,你将知道Swift、Xcode以及Cocoa框架的基础,接下来就可以直接开始阅读《Programming iOS 9》了。相反,《Programming iOS 9》假设你已经掌握了本书所介绍的内容;一开始它就会介绍视图与视图控制器,同时假设你已经掌握了语言本身和Xcode IDE。如果开始阅读《Programming iOS 9》并且想知道书中一些没有讲解过的东西,如Swift语言基础、UIApplicationMain函数、nib加载机制、Cocoa的委托与通知模式、保持循环等,那就不要尝试在该书中寻找答案了,我并没有在那本书中介绍这些内容,因为这里都介绍过了。
本书的3部分内容将会介绍iOS编程的基础知识:
第一部分从头开始介绍Swift语言。我没有假设你知道任何其他的编程语言。我讲解Swift的方式与其他人不同,如苹果公司的方式;我会采取系统的方式,逐步推进,不断深入。同时,我会讲解最本质的内容。Swift并不是一门庞大的语言,不过却有一些微妙之处。你无须深入到全部内容当中,我也不会面面俱到地讲解。你可能永远都不会遇到一些问题,即便遇到了,那也说明你已经进入到了高级Swift的世界当中,而这已经超出了本书的讨论范围。比如,读者可能会惊奇地发现我在书中从来都没有提到过Swift playground和REPL。本书的关注点在于实际的iOS编程,因此我对Swift的介绍将会关注在这些常见、实际的方面上;以我的经验来看,这些内容才是iOS编程当中用得最多的。
第二部分将会介绍Xcode,这是我们进行iOS编程的地方。我将介绍何为Xcode项目,如何将其转换为应用,如何通过Xcode来查阅文档,如何编写、导航与调试代码,以及如何在设备上运行应用并提交到App Store等过程。该部分还有重要的一章用来介绍nib与nib编辑器(Interface Builder),包括插座变量与动作,以及nib加载机制;不过,诸如nib中的自动布局限制等专门的主题则不在本书的讨论范围之中。
第三部分将会介绍Cocoa Touch框架。在进行iOS编程时,你会使用到苹果公司提供的大量框架。这些框架共同构成了Cocoa;为iOS编程提供API的Cocoa叫作Cocoa Touch。你的代码最终将是关于如何与Cocoa进行通信的。Cocoa Touch框架提供了iOS应用所需的底层功能。不过要想使用框架,你需要按照框架的想法去做,将代码放到框架期望的位置处,实现框架要求你实现的功能。有趣的是,Cocoa使用的是Objective-C,你使用的是Swift:你需要知道Swift代码如何与Cocoa的特性与行为进行交互。Cocoa提供了重要的基础类,并添加了一些语言与架构上的设施,如类别、协议、委托、通知,以及关于内存管理的基本功能。该部分还会介绍键值编码与键值观测。
本书读者将会掌握任何优秀的iOS开发者所需的基础知识与技术;但本书并不会介绍如何编写一个有趣的iOS应用,书中会大量使用我自己编写的应用与实际的编程场景来阐述理论知识。接下来各位读者就可以阅读《Programming iOS 9》了。
版本
本书使用的是Swift 2.0、iOS 9与Xcode 7。
总的来说,本书并不会对老版本的iOS与Xcode做过多介绍。我也不会有意在书中对老版本的软件进行讲解,毕竟这些内容在我之前的书中都有过介绍。不过,本书会针对向后兼容性给出一些建议(特别是在第9章)。
Xcode 7所包含的Swift语言(Swift 2.0)相比于之前的版本Swift 1.2发生了很大的变化。如果之前使用过Swift 1.2,那么你就会发现如果不做一些修改,代码是无法在Swift 2.0中编译通过的。与之类似,书中的代码使用Swift 2.0编写而成,它也完全无法与Swift 1.2保持兼容。你之前可能有过Swift 1.2的编程经验,随着我的不断讲解,你会发现不少重要的语言特性在Swift 2.0中都发生了变化。不过,我并不会介绍Swift 1.2;如果想要了解(虽然我不知道你为什么要了解),那么请参考本书的前一版。
致谢
首先感谢O扲eilly Media的工作人员,正是他们才让一本书的写作过程充满了快乐:Rachel Roumeliotis、Sarah Schneider、Kristen Brown、Dan Fauxsmith与Adam Witwer。我也不会忘记编辑Brian Jepson,虽然他并未参与本版的工作,但对我的影响却一直都在。
一直以来,一些优秀的软件对我起到了巨大的帮助作用,我在写作本书的过程中一直都心存谢意。这些软件主要有:
git(http://git-scm.com)
SourceTree(http://www.sourcetreeapp.com)
TextMate(http://macromates.com)
AsciiDoc(http://www.methods.co.nz/asciidoc)
BBEdit(http://barebones.com/products/bbedit/)
Snapz Pro X(http://www.ambrosiasw.com)
GraphicConverter(http://www.lemkesoft.com)
OmniGraffle(http://www.omnigroup.com)
我通过忠实的Unicomp Model M键盘(http://pckeyboard.com)完成了全书的输入与编辑工作,如果没有它我是不可能在如此长的时间内轻松敲下这么多字的。请通过http://matt.neuburg.usesthis.com了解我的工作环境。
《Programming iOS 4》前言
编程框架体现了一个人的品格,它是创建者对于目标与心智的反映。第一次使用Cocoa Touch时,我对其品格的评价是这样的:“喔,创建它的人真是绝顶聪明啊!”一方面,内建的界面对象数量有意得到了限制;另一方面,一些对象的功能与灵活性(特别是UITableView等)要比其OS X的对应者更加强大。更为重要的是,苹果公司提供了一种聪明的方式(UIViewController)来帮助开发者创建整个界面并使用一个界面替换掉另一个,这些以一种可控、层次化的方式来实现,这样小小的iPhone就可以在一个应用中显示多个界面了,还不会让用户迷失或感到困惑。
iPhone的流行(大量免费与便宜的应用起到了很大的帮助作用)以及随后iPad的流行让很多新的开发者看到为这些设备编写程序是值得的,虽然他们对OS X可能没有相同的感觉。苹果公司自己的年度WWDC开发者大会也反映出了这种趋势,其重心也由OS X逐渐向iOS倾斜。
不过,人们渴望编写iOS程序的想法也导致了这样一种趋势:还没有学会走就开始跑了。iOS赋予了开发者强大的能力,心有多大舞台就有多大,不过这也是需要基础的。我常常看到一些iOS开发者提出的问题,虽然他们在编写着应用,但其对基础知识的理解非常肤浅。
这种情况促使我写作了这本书,本书旨在介绍iOS的基础知识。我喜欢Cocoa,也一直希望能有机会写一本关于Cocoa的图书,不过iOS的流行却让我编写了一本关于iOS的图书。我尝试采取一种合乎逻辑的方式进行说明和讲解,介绍iOS编程所需的原则与元素。正如之前的图书一样,我希望你能完整阅读这本书(学习新东西肯定会不停翻书),并将其作为案头参考。
本书并不是要代替苹果公司自己的文档与示例项目。那些都是非常棒的资源,随着时间的流逝将会变得越来越好。在准备本书写作的过程中我也将其作为参考资源。但是,我发现它们并不是按照顺序以一种合理的方式来完成一个功能的。在线文档会假设你的预备知识;它不能确保你会按照给定的方式来完成。此外,在线文档更适合作为参考而不是指南。完整的示例(无论注释有多么充分)都是难以跟着学习的;它可以作为演示,但却无法作为教学资源。
另外,图书的章节号和页码连续,内容的连贯性比较强;我可以在你学习视图控制器之前假定你已经知道视图了,因为第一部分位于第二部分之前。此外,我还会将自己的经验逐步分享给你。在全书中,你会发现我不断提及“常见的初学者错误”;除了一些其他人的错误,在大多数情况下,这些都是我曾经犯过的错误。我会告诉你一些陷阱,因为这些都是我曾经遇到过的,我相信你也一定会遇到。你还会看到我给出了不少示例,目的是解释一个大应用的一小部分内容。这并非用于讲解编程的一个已经完成的大程序,而是开发这个程序时的思考过程。我希望你在阅读本书时能够掌握这种思考过程。
本书约定
本书中使用以下排版约定:
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
表示代码示例,以及插穿在文中的代码,包括:变量或函数名、数据库、数据类型、环境变量、语句,以及关键字。
等宽粗体(Constant width bold)
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽斜体(Constant width italic)
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
这个元素表示提示或建议。
这个元素表示一般注解。
这个元素表示警告。

如何使用示例代码
本书在这里帮助你完成你的工作。总的来讲,你可以在你的程序和文档中使用本书中的代码。你不需要联系我们以征得许可,除非你正在复制代码中的重要部分。比如,使用书中的多段代码写一个程序并不需要获得许可。
若将O扲eilly公司出版的书中的例子制成光盘来销售或发行则需要获得许可。在回答问题时,引用本书和列举书中的例子代码并不需要许可。把本书中的代码作为你产品文档的重要部分时需要获得许可。
我们希望但并不要求你在引用本书内容时说明引文的文献出处。引用通常包括题目、作者、出版社和ISBN号。例如,《iOS 9 Programming Fundamentals with Swift》,Matt Neuburg (O扲eilly)。Copyright 2016 Matt Neuburg,978-1-491-93677-1。”
如果你感觉你对代码示例的使用超出合理使用以及上述许可范围,请通过permissions@oreilly.com联系我们。
Safari际樵谙
Safari图书在线(www.safaribooksonline.com)是一个按需数字图书馆,它采用图书和视频两种形式发布专业级的内容,作者都是来自技术和商业领域的世界顶尖专家。
技术专家、软件开发者、网站设计者和商业及创新专家都使用Safari图书在线作为他们研究、解决问题、学习和职业资格培训的首要资源。
Safari图书在线为各种组织、政府机构和个人提供丰富的产品和定价程序。订购者可在一个全文可检索数据库中浏览数以千计的图书、培训视频和预出版手稿。它们来自O扲eilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology等的众多出版社。关于Safari图书在线的更多信息,请在线访问我们。
如何联系我们
美国:
O''Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书提供了网页,该网页上面列出了勘误表、范例和任何其他附加的信息。您可以访问如下网页获得:
http://oreil.ly/HP-Drupal
要询问技术问题或对本书提出建议,请发送电子邮件至:
bookquestions@oreilly.com
要获得更多关于我们的书籍、会议、资源中心和O扲eilly网络的信息,请参见我们的网站:
http://www.oreilly.com.cn
http://www.oreilly.com

上架指导

计算机\程序设计

封底文字

通过掌握重要的基础知识来进入iOS开发的世界,本书主要介绍Xcode IDE、Cocoa Touch框架与Swift 2.0。通过阅读本书,你将学到Swift面向对象的概念、理解如何使用Apple的开发工具,以及探索Cocoa是如何提供iOS应用所需的底层功能的。

 探索Swift面向对象的概念:变量与函数、作用域与命名空间,对象类型与实例
 熟悉内建的Swift类型,如数字、字符串、范围、元组、Optional、数组、字典与集合
 学习如何声明、实例化与定制Swift对象类型
 探索强大的Swift特性,如协议与泛型
 学习Swift 2.0的新特性:选项集合、协议扩展、错误处理、guard语句、可用性检测等
 了解Xcode项目的生命周期
 使用nib、nib编辑器Interface Builder来创建应用界面
 理解Cocoa的事件驱动模型与主要的设计模式和特性
 掌握Swift与Cocoa的C和Objective-C API通信的方式

“Neuburg是我最喜欢的编程图书作者。”
——John Gruber
Daring Fireball

Matt Neuburg,拥有古典文学博士学位,曾在多所大学授课。他是《MacTech》杂志的编辑以及TidBITS的特约编辑。Neuburg编写过很多OS X与iOS应用。此前曾出版过《Programming iOS 8、REALbasic: The Definitive Guide》以及《AppleScript: The Definitive Guide》等著作。

作者简介

[美] 马特?诺伊贝格(Matt Neuburg)著:暂无简介

译者序

在2014年的WWDC大会上,苹果公司正式发布了Swift这门全新的编程语言。作为iOS与OS X平台上的老牌编程语言Objective-C的有益补充和替代者,Swift从发布伊始就激发了广大开发者的强烈兴趣。学习和尝试Swift编程语言的开发人员越来越多,这也促使Swift这门新语言在TIOBE编程语言排行榜上的排名一路攀升,成为一颗耀眼的编程语言新星,同时也是有史以来增长速度最快的语言。虽然Swift的初始版本存在着不少问题,但苹果公司仍在不遗余力地持续推动着这门语言的发展。作为iOS与OS X的开发者,我们欣喜地看到Swift语言不断增强的功能、不断增加的特性以及不断优化的性能。这些都是Swift能够迅速得到广大开发者青睐的重要因素。

值得一提的是,一年后苹果公司在WWDC 2015上正式宣布将Swift开源,并于同年年底发布了全新的网站https://swift.org。目前Swift开源代码托管在GitHub上,任何感兴趣的开发者都可以下载学习。Swift如此之快的发展速度一方面得益于苹果公司各项产品的推出,另一方面也是由于广大开发者的热烈追捧。作为一门年轻的编程语言,能在短短两年时间内就获得如此成功,这也是我们广大iOS开发者的一个福音。技术发展日新月异,只有跟上技术发展的步伐我们才能在未来立于不败之地。目前,国内外已经有不少公司将自己的iOS应用部分或全部由Objective-C迁移至Swift,很多新项目也已经开始使用Objective-C进行开发了。这都进一步证实了Swift未来巨大的发展潜力。

本书可谓是Swift编程语言的一部百科全书。在学习本书之前不需要读者具备任何Swift背景知识(当然,适当了解Objective-C将会有助于学习,但也并非必需),读者只需要打开本书,从第1章开始逐章阅读即可。全书采用了由浅入深、循序渐进的方式对Swift语言进行讲解,同时辅以大量可运行的代码示例帮助读者加深对理论知识的理解。毕竟,无论学习何种知识与技术,基础永远是最为重要的;坚实的基础将会帮助你更好地掌握技术,并且也会对后续的学习产生积极的作用。
全书共分13章,每一章都单独讲解一个主题,目的在于帮助读者集中精力掌握好Swift每一个重要且关键的知识点。从Swift架构概览开始,接着介绍了函数、变量、对象类型与流程控制,这些都是Swift重要的基础知识;然后又介绍了Xcode项目的管理、nib、文档以及项目的生命周期;全书最后对Cocoa类、Cocoa事件、内存管理与对象间通信等高级主题展开了详尽的介绍。此外,附录A对C、Objective-C与Swift之间的关系和调用方式进行了详尽的论述。学习完本书后,读者将会掌握Swift重要且关键的特性与知识点,完全可以着手通过Swift开发全新的iOS应用。
Swift编程语言涉及的知识点与特性非常多,没有任何一本书能够穷尽Swift的每一项特性,本书也不例外。本书可以作为读者学习Swift编程语言的入门指引,学习完本书后可以通过苹果公司的Swift编程语言官方文档等在线资源进一步加深对该门语言的理解和认识,并通过实际动手来掌握Swift的每一项特性。可以这么说,通过阅读本书,读者将会具备Swift开发的一般知识与技能,辅以一定的实践操作,相信经过一段时间的锤炼,你就可以真正精通这门优秀的编程语言。
技术图书的翻译是一项异常艰苦的劳动,这里我要将深深的感激之情送给我的家人,感谢你们在生活中对我无微不至的关怀,使我能够专心于翻译工作;此外,我要将这本书送给我亲爱的孩子张梓轩小朋友,每当爸爸感到疲惫时,看到你就会立刻获得无尽的动力,你永远是爸爸的开心果,如果你未来有志成为一名程序员,爸爸愿意祝你一臂之力;最后,非常感谢机械工业出版社华章分社的缪杰老师,感谢你对我持续的帮助,每一次与你沟通都非常顺畅,虽未曾谋面,但已然是老友。
虽然译者已经在本书的翻译工作上倾注了大量的心力,不过囿于技术与英文水平,书中难免出现一些瑕疵。如果在阅读过程中发现了问题,请不吝赐教并发邮件至zhanglong217@163.com,我会逐一检查每一项纰漏,以期重印时修订。

张龙
2016年于北京

图书目录

前言 1
第一部分 语言
第1章 Swift架构纵览 11
1.1 基础 11
1.2 万物皆对象 12
1.3 对象类型的3种风格 14
1.4 变量 14
1.5 函数 15
1.6 Swift文件的结构 16
1.7 作用域与生命周期 19
1.8 对象成员 20
1.9 命名空间 20
1.10 模块 21
1.11 实例 22
1.12 为何使用实例 24
1.13 self 26
1.14 隐私 27
1.15 设计 29
1.15.1 对象类型与API 29
1.15.2 实例创建、作用域与生命周期 31
1.15.3 小结 32
第2章 函数 34
2.1 函数参数与返回值 34
2.1.1 Void返回类型与参数 37
2.1.2 函数签名 38
2.2 外部参数名 38
2.3 重载 41
2.4 默认参数值 42
2.5 可变参数 43
2.6 可忽略参数 44
2.7 可修改参数 44
2.8 函数中的函数 48
2.9 递归 49
2.10 将函数作为值 50
2.11 匿名函数 53
2.12 定义与调用 57
2.13 闭包 58
2.13.1 闭包是如何改善代码的 59
2.13.2 返回函数的函数 61
2.13.3 使用闭包设置捕获变量 64
2.13.4 使用闭包保存捕获的环境 64
2.14 柯里化函数 66
第3章 变量与简单类型 68
3.1 变量作用域与生命周期 68
3.2 变量声明 69
3.3 计算初始化器 72
3.4 计算变量 73
3.5 setter观察者 76
3.6 延迟初始化 77
3.7 内建简单类型 79
3.7.1 Bool 80
3.7.2 数字 81
3.7.3 String 88
3.7.4 Character 93
3.7.5 Range 96
3.7.6 元组 98
3.7.7 Optional 102
第4章 对象类型 114
4.1 对象类型声明与特性 114
4.1.1 初始化器 115
4.1.2 属性 122
4.1.3 方法 125
4.1.4 下标 127
4.1.5 嵌套对象类型 128
4.1.6 实例引用 129
4.2 枚举 131
4.2.1 带有固定值的Case 132
4.2.2 带有类型值的Case 133
4.2.3 枚举初始化器 134
4.2.4 枚举属性 136
4.2.5 枚举方法 137
4.2.6 为何使用枚举 138
4.3 结构体 139
4.3.1 结构体初始化器、属性与方法 139
4.3.2 将结构体作为命名空间 140
4.4 类 141
4.4.1 值类型与引用类型 142
4.4.2 子类与父类 146
4.4.3 类初始化器 151
4.4.4 类析构器 159
4.4.5 类属性与方法 159
4.5 多态 161
4.6 类型转换 164
4.7 类型引用 168
4.8 协议 172
4.8.1 为何使用协议 174
4.8.2 协议类型测试与转换 176
4.8.3 声明协议 177
4.8.4 可选协议成员 178
4.8.5 类协议 180
4.8.6 隐式必备初始化器 180
4.8.7 字面值转换 182
4.9 泛型 183
4.9.1 泛型声明 185
4.9.2 类型约束 186
4.9.3 显式特化 189
4.9.4 关联类型链 190
4.9.5 附加约束 192
4.10 扩展 196
4.10.1 扩展对象类型 196
4.10.2 扩展协议 199
4.10.3 扩展泛型 202
4.11 保护类型 203
4.11.1 AnyObject 203
4.11.2 AnyClass 206
4.11.3 Any 207
4.12 集合类型 208
4.12.1 Array 208
4.12.2 Dictionary 222
4.12.3 Set 227
第5章 流程控制与其他 232
5.1 流程控制 232
5.1.1 分支 233
5.1.2 循环 245
5.1.3 跳转 250
5.2 运算符 261
5.3 隐私性 264
5.3.1 Private声明 265
5.3.2 Public声明 267
5.3.3 隐私性规则 267
5.4 内省 267
5.5 内存管理 269
5.5.1 弱引用 270
5.5.2 无主引用 272
5.5.3 匿名函数中的弱引用与无主引用 273
5.5.4 协议类型引用的内存管理 275
第二部分 IDE
第6章 Xcode项目剖析 279
6.1 新建项目 279
6.2 项目窗口 281
6.2.1 导航窗格 282
6.2.2 辅助窗格 288
6.2.3 编辑器 289
6.3 项目文件及其依赖 291
6.4 目标 293
6.4.1 构建阶段 294
6.4.2 构建设置 296
6.4.3 配置 297
6.4.4 方案与目标 298
6.5 从项目到运行应用 300
6.5.1 构建设置 303
6.5.2 属性列表设置 303
6.5.3 nib文件 304
6.5.4 其他资源 305
6.5.5 代码文件与应用启动过程 307
6.5.6 框架与SDK 312
6.6 对项目内容进行重命名 314
第7章 nib管理 316
7.1 nib编辑器界面概览 317
7.1.1 文档大纲 318
7.1.2 画布 321
7.1.3 查看器与库 323
7.2 nib加载 324
7.2.1 何时加载nib 325
7.2.2 手工加载nib 326
7.3 连接 328
7.3.1 插座变量 328
7.3.2 nib拥有者 330
7.3.3 自动配置nib 333
7.3.4 误配置的插座变量 333
7.3.5 删除插座变量 335
7.3.6 创建插座变量的其他方式 335
7.3.7 插座变量集合 338
7.3.8 动作连接 339
7.3.9 创建动作的其他方式 340
7.3.10 误配置的动作 342
7.3.11 nib之间的连接——不行! 342
7.4 nib实例的其他配置 343
第8章 文档 346
8.1 文档窗口 346
8.2 类文档页面 349
8.3 示例代码 351
8.4 快速帮助 352
8.5 符号 353
8.6 头文件 354
8.7 互联网资源 355
第9章 项目的生命周期 356
9.1 设备架构与条件代码 356
9.1.1 向后兼容 357
9.1.2 设备类型 359
9.2 版本控制 360
9.3 编辑与代码导航 362
9.3.1 自动补令 363
9.3.2 代码片段 364
9.3.3 Fix-it与实时语法检查 365
9.3.4 导航 366
9.3.5 查找 368
9.4 在模拟器中运行 369
9.5 调试 370
9.5.1 原始调试 370
9.5.2 Xcode调试器 372
9.6 测试 378
9.7 清理 383
9.8 在设备中运行 384
9.8.1 在没有开发者计划成员资格的情况下运行 386
9.8.2 获取开发者计划成员资格 387
9.8.3 获取证书 387
9.8.4 获取开发配置文件 389
9.8.5 运行应用 390
9.8.6 配置文件与设备管理 390
9.9 分析 391
9.9.1 仪表盘 391
9.9.2 Instruments 392
9.10 本地化 394
9.10.1 本地化Info.plist 396
9.10.2 本地化nib文件 398
9.10.3 本地化代码字符串 399
9.10.4 使用XML文件进行本地化 401
9.11 归档与发布 403
9.12 Ad Hoc发布 405
9.13 最后的准备 406
9.13.1 应用图标 407
9.13.2 其他图标 408
9.13.3 启动图片 408
9.13.4 屏幕截图与视频预览 409
9.13.5 属性列表设置 410
9.14 向App Store提交应用 411
第三部分 Cocoa
第10章 Cocoa类 417
10.1 子类化 417
10.2 类别与扩展 420
10.2.1 Swift如何使用扩展 420
10.2.2 你应该如何使用扩展 421
10.2.3 Cocoa如何使用类别 421
10.3 协议 423
10.3.1 非正式协议 425
10.3.2 可选方法 425
10.4 Foundation类精讲 427
10.4.1 常用的结构体与常量 427
10.4.2 NSString及相关类 428
10.4.3 NSDate及相关类 431
10.4.4 NSNumber 433
10.4.5 NSValue 434
10.4.6 NSData 435
10.4.7 相等与比较 435
10.4.8 NSIndexSet 437
10.4.9 NSArray与NSMutableArray 438
10.4.10 NSDictionary与NSMutableDictionary 440
10.4.11 NSSet及相关类 440
10.4.12 NSNull 442
10.4.13 不变与可变 442
10.4.14 属性列表 443
10.5 访问器、属性与键值编码 443
10.5.1 Swift访问器 445
10.5.2 键值编码 446
10.5.3 键值编码的使用 447
10.5.4 KVC与插座变量 448
10.5.5 键路径 449
10.5.6 数组访问器 450
10.6 NSObject揭秘 450
第11章 Cocoa事件 453
11.1 为何使用事件 453
11.2 子类化 454
11.3 通知 455
11.3.1 接收通知 456
11.3.2 取消注册 458
11.3.3 发布通知 459
11.3.4 NSTimer 460
11.4 委托 461
11.4.1 Cocoa委托 461
11.4.2 实现委托 463
11.5 数据源 465
11.6 动作 465
11.7 响应器链 468
11.7.1 推迟职责 469
11.7.2 Nil-Targeted动作 470
11.8 键值观测 471
11.9 事件泥潭 475
11.10 延迟执行 477
第12章 内存管理 480
12.1 Cocoa内存管理的原理 480
12.2 Cocoa内存管理的原则 481
12.3 ARC及其作用 482
12.4 Cocoa对象管理内存的方式 483
12.5 自动释放池 484
12.6 实例属性的内存管理 486
12.7 保持循环与弱引用 487
12.8 值得注意的内存管理情况 488
12.9 nib加载与内存管理 492
12.10 CFTypeRefs的内存管理 493
12.11 属性的内存管理策略 495
12.12 调试内存管理的错误 497
第13章 对象间通信 499
13.1 实例化可见性 500
13.2 关系可见性 502
13.3 全局可见性 503
13.4 通知与KVO 504
13.5 模型-视图-控制器 505
附录A C、Objective-C与Swift 507

教学资源推荐
作者: (美)Daniel M. Bikel, Imed Zitouni 编
作者: (美)Y.Daniel Liang 著
作者: 苏运霖
作者: 哈罗德·阿贝尔森(Harold Abelson)[美] 杰拉尔德•杰伊·萨斯曼(Gerald Jay Sussman) 著朱莉·萨斯曼(Julie Sussman)
参考读物推荐
作者: 宫垂刚 韦一 张华丰
作者: (美)David Sawyer McFarland 著