
2.2 Xcode 8的基本操作
经过本章前面内容的介绍,已经了解了Xcode 8中面板的基本知识。在本节的内容中,将详细讲解在Xcode 8中迚行基本操作的知识。
2.2.1 改变公司名称
通过xcode编写代码,代码的头部会有类似于图2-19所示的内容。

图2-19 头部内容
在此可以将这部分内容改为公司的名称或者项目的名称。
2.2.2 通过搜索框缩小文件范围
当项目开发到一段时间后,源代码文件会越来越多。再从Groups & Files的界面去点选,效率比较差。可以借助Xcode的浏览器窗口,如图2-20所示。

图2-20 Xcode的浏览器窗口
在图2-20的搜索框中可以输入关键字,这样浏览器窗口里只显示带关键字的文件了,比如只想看Book相关的类,如图2-21所示。

图2-21 输入关键字
2.2.3 格式化代码
例如在图2-22所示的界面中,有很多行都顶格了,此时需要迚行格式化处理。

图2-22 多行都顶格
选中需要格式化的代码,然后在上下文菜单中迚行查找,这是比较规矩的办法,如图2-23所示。

图2-23 在上下文菜单中迚行查找
Xcode没有提供快捷键,当然自己可以设置,此时可以用快捷键实现,例如Ctrl+a(全选文字)、Ctrl+x(剪切文字)、Ctrl+v(粘贴文字)。Xcode会对粘贴的文字格式化。
2.2.4 代码缩进和自动完成
有的时候代码需要缩迚,有的时候又要做相反的操作。单行缩迚和其他编辑器类似,只需使用Tab键即可。如果选中多行则需要使用快捷键,其中command+]表示缩迚,command+[表示反向缩迚。
使用IDE工具的一大好处是,工具能够帮助我们自动完成冗长的类型名称。Xcode提供了这方面的功能。比如下面的输出日志。
NSLog(@"book author: %@", book.author);
如果都自己输入会很麻烦的,可以先输入ns,然后使用快捷键“Ctrl+.”,会自动出现如下代码。
NSLog(NSString * format)
然后填写参数即可。快捷键“Ctrl+.”的功能是自动给出第一个匹配ns关键字的函数或类型,而NSLog是第一个。如果继续使用“Ctrl+.”,则会出现比如NSString的形式。以此类推,会显示所有ns开头的类型或函数,并循环往复。或者,也可以用“Ctrl+,”快捷键,比如还是ns,那么会显示全部ns开头的类型、函数、常量等的列表。可以在这里选择。其实,Xcode也可以在你输入代码的过程中自动给出建议。比如要输入NSString。当输入到NSStr的时候。
NSString
此时后面的ing会自动出现,如果和我预想的一样,只需直接按Tab键确认即可。也许你想输入的是NSStream,那么可以继续输入。另外也可按ESC键,这时就会出现结果列表供选择了,如图2-24所示。

图2-24 出现结果列表
如果是正在输入方法,那么会自动完成如图2-25所示的样子。

图2-25 自动完成的结果
我们可以使用Tab键确认方法中的内容,或者通过快捷键“Ctrl+/”在方法中的参数来回切换。
2.2.5 文件内查找和替代
在编辑代码的过程中经常会做查找和替代的操作,如果只是查找则直接按“command+f”即可,在代码的右上角会出现如图2-26所示的对话框。只需在里面输入关键字,不论大小写,代码中所有命中的文字都高亮显示。

图2-26 查找界面
也可以实现更复杂的查找,比如是否大小写敏感,是否使用正则表达式等。设置界面如图2-27所示。

图2-27 复杂查找设置
通过图2-28中的“Find & Replace”可以切换到替代界面。

图2-28 “Find & Replace”替换
例如图2-29所示的界面将查找设置为大小写敏感,然后替代为myBook。

图2-29 替代为myBook
另外,也可以单击按钮是否全部替代,还是查找一个替代一个等。如果需要在整个项目内查找和替代,则依次单击“Find”->“Find in Project…”命令,如图2-30所示。

图2-30 “Find in Project…”命令
还是以找关键字book为例,则实现界面如图2-31所示。

图2-31 在整个项目内查找“book”关键字
替代操作的过程也与之类似,在此不再迚行详细讲解。
2.2.6 快速定位到代码行
如果想定位光标到选中文件的行上,可以使用快捷键“Command+L”来实现,也可以依次单击“Navigate”->“Jump to Line…”命令实现,如图2-32所示。

图2-32 “Jump to Line”命令
在使用菜单或者快捷键时都会出现下面的对话框,输入行号和回车后就会来到该文件的指定行,如图2-33所示。

图2-33 输入行号
2.2.7 快速打开文件
有时候需要快速打开头文件,例如图2-34所示的界面。要想知道这里的文件ViewController.h到底是什么内容,可以鼠标选中文件ViewController.h来实现。

图2-34 一个头文件
依次单击“File”->“Open Quickly…”命令,如图2-35所示。

图2-35 “Open Quickly…”命令
此时会弹出如图2-36所示的对话框。

图2-36 “Open Quickly…”对话框
此时双击文件ViewController.h的条目就可以看到如图2-37所示的界面。

图2-37 文件ViewController.h的内容
2.2.8 自定义导航条
在代码窗口上边有一个工具条,此工具条提供了很多方便的导航功能,如图2-38所示的功能。

图2-38 一个导航条
也可以用来实现上面TODO的需求。这里有两种自定义导航条的写法。其中下面是标准写法。
#pragma mark
而下面是Xcode兼容的格式。
// TODO: xxx // FIXME: xxx
完整的代码如图2-39所示。

图2-39 完整的代码
此时会产生如图2-40所示的导航条效果。

图2-40 产生的导航条效果
2.2.9 使用Xcode帮助
如果想快速地查看官方API文档,可以在源代码中按下“Option”键并鼠标双击该类型(函数、变量等),比如图2-41所示的是“didReceiveMemoryWarning”的API文档对话框。

图2-41 didReceiveMemoryWarning的API文档对话框
如果单击图2-41中标识的按钮,会弹出完整文档的窗口,如图2-42所示。

图2-42 完整文档的窗口
2.2.10 调试代码
最简单的调试方法是通过NSLog打印出程序运行中的结果,然后根据这些结果判断程序运行的流程和结果值是否符合预期。对于简单的项目,通常使用这种方式就足够了。但是,如果开发的是商业项目,需要借助Xcode提供的专门调试工具。所有的编程工具的调试思路都是一样的。首先要在代码中设置断点,此时可以想象一下,程序的执行是顺序的,可能怀疑某个地方的代码出了问题(引发bug),那么就在这段代码开始的地方,比如是这个方法的第一行,或者循环的开始部分,设置一个断点。那么程序在调试时会在运行到断点时终止,接下来可以一行一行地执行代码,判断执行顺序是否是自己预期的,或者变量的值是否和自己想的一样。
设置断点的方法非常简单,比如想对框中(运行到)表示的行设置断点,就单击该行左侧圈的位置,如图2-43所示。

图2-43 单击该行左侧圈的位置
单击后会出现断点标志,如图2-44所示。

图2-44 出现断点标志
然后运行代码,比如使用“Command+Enter”命令,这时将运行代码,并且停止在断点处,如图2-45所示。

图2-45 停止在断点处
可以通过“Shift+Command+Y”命令调出调试对话框,如图2-46所示。

图2-46 调试对话框
这和其他语言IDE工具的界面大同小异,因为都具有类似的功能。下面是主要命令的具体说明。
❑:Continue program execution按钮,表示继续执行程序。
❑:3各单步调试按钮,分别表示如下3点说明。
❑:step over按钮,将执行当前方法内的下一个语句。
❑:step into按钮,如果当前语句是方法调用,将单步执行当前语句调用方法内部第一行。
❑:step out按钮,将跳出当前语句所在方法,到方法外的第一行。
通过调试工具,可以对应用做全面和细致的调试。