![Swift细致入门与最佳实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/88/26177088/b_26177088.jpg)
1.3 使用Xcode开发环境
经过本书1.2节内容的讲解之后,接下来开始讲解使用Xcode开发环境的基本知识,为读者步入后面Objective-C知识的学习打下坚实的基础。
1.3.1 改变公司名称
通过xcode编写代码,代码的头部会出现类似于图1-12所示的内容。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00022002.jpg?sign=1739671571-lgb80NI7Nc9U290DKtEtgPLX5Pbm6ibD-0-543cf4de60c924adf314bbb66f2eb2e8)
图1-12 头部内容
在此可以将这部分内容改为公司的名称或者项目的名称。
1.3.2 通过搜索框缩小文件范围
当项目开发到一段时间后,源代码文件会越来越多。再从Groups & Files的界面去点选,效率会比较差。可以借助Xcode的浏览器窗口,如图1-13所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00023001.jpg?sign=1739671571-pnZiPCOV1sqHkBoXDHtdirpRrCdts5uw-0-68fc4ebd82cc1a85886e2066a9c3d297)
图1-13 Xcode的浏览器窗口
在图1-13的搜索框中可以输入关键字,这样浏览器窗口中只显示带有关键字的文件,如图1-14所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00023002.jpg?sign=1739671571-vcYrXCUHV67CMbUY9bgrAOcSBZdOxwYa-0-17f4f8d138a9709aa37f939536a4e5ef)
图1-14 输入关键字
1.3.3 格式化代码
例如,在图1-15所示的界面中,有很多行都顶格了,此时需要进行格式化处理。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00024001.jpg?sign=1739671571-9XrJqDlkMKMh1iyPQmq2CWnXT83mlx3z-0-ab3cf1e5922b85ae94154fa38bffb1ca)
图1-15 多行顶格
选中需要格式化的代码,在上下文菜单中进行查找,这是比较常规的办法。如图1-16所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00024002.jpg?sign=1739671571-5jcNbhOplewsSsLTSmNwXK3vM9rmM7j3-0-2cfc5b19c155339219b850d48fa3ee84)
图1-16 在上下文菜单中进行查找
Xcode没有提供快捷键,当然可以自己设置,此时可以用快捷键实现,例如:ctrl+a(全选文字),ctrl+x(剪切文字),ctrl+v(粘贴文字)。Xcode会对粘贴的文字进行格式化。
1.3.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】键,这时就会出现以下结果列表以供选择。如图1-17所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00025001.jpg?sign=1739671571-4TuNNl47b7nWqGYjk5www8YuxT2C7msx-0-4bc6026d4083cf3dae69d7e483553231)
图1-17 出现结果列表
如果是正在输入方法,那么会自动完成,如图1-18所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00025002.jpg?sign=1739671571-ON6ysBV2oXjX498MjeY8LdAXs78PiZ9G-0-dade66f65b4f5affde5a3cb3b59d227c)
图1-18 自动完成的结果
可以使用【tab】键确认方法中的内容,或者通过快捷键【ctrl+/】在方法中的参数来回切换。
1.3.5 文件内查找和替代
在编辑代码的过程中经常会做查找和替代的操作,如果只是查找则直接按快捷键【command+f】即可,在代码的右上角会出现图1-19所示的对话框。只需输入关键字,不论大小写,代码中所有命中的文字都会高亮显示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00026001.jpg?sign=1739671571-5vyuduR0IAFAEKOYLxGGzunPLByxz0RJ-0-1bd37d7cff19c03fa856c2c4e7460ff1)
图1-19 查找界面
也可以实现更复杂的查找,比如是否大小写敏感,是否使用正则表达式等。设置界面如图1-20所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00026002.jpg?sign=1739671571-tUU7dPueu5ZoyGqEZgyQaxgpoetOlOee-0-1054ba4b9fc77591c00daee9f8d425a9)
图1-20 复杂查找设置
通过图1-21中的“Find & Replace”可以切换到替代界面。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00026003.jpg?sign=1739671571-M4CqVYkegzUiXK5fst9Sc6uIL9yJ68rw-0-e02455850b7d5011801af70e07ce1a39)
图1-21 “Find & Replace”替换
图1-22所示的界面将查找设置为大小写敏感,然后替代为myBook。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00027001.jpg?sign=1739671571-v8QTvOKMvGFvPEVYRRG3EekakXX7XaKO-0-93b5978524c75a50f26bc646f734f5ea)
图1-22 替代为myBook
另外,也可以单击按钮是否全部替代,还是查找一个替代一个等。如果需要在整个项目内查找和替代,则依次选择“Find”→“Find in Project…”命令,如图1-23所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00027002.jpg?sign=1739671571-73FyMTDD4MTXx2dH6azMrblhuOvEcLHo-0-7a031d9d8887ee3933537b080e83dced)
图1-23 “Find”→“Find in Project…”命令
还是以查找关键字book为例,实现界面如图1-24所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00027003.jpg?sign=1739671571-IbDrKmPNFhucZJEyd6SipTlg94gZBknp-0-0b77f802cdbfb227c00bfa9f69cd3925)
图1-24 在整个项目内查找“book”关键字
替代操作的过程也与之类似,在此不再赘述。
1.3.6 快速定位到代码行
如果想定位光标到选中文件的行上,可以使用快捷键【Command+L】来实现,也可以依次选择“Navigate”→“Jump to Line…”命令实现。如图1-25所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00028001.jpg?sign=1739671571-nnVihIvKOGb16b4197VnahDwtgwhWj2C-0-f11e0975d8c7a8fcde56307933d25cd0)
图1-25 “Navigate”→“Jump to Line…”命令
在使用菜单或者快捷键时会出现下面的对话框,输入行号和按回车键后就会来到该文件的指定行。如图1-26所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00028002.jpg?sign=1739671571-vwtzylaEIDxUSZ78saW3RLcPk1hoDfcQ-0-3c15bb1247ca15822f9d5f4d3bf49eca)
图1-26 输入行号
1.3.7 快速打开文件
有时需要快速打开头文件,如图1-27所示的界面。要想知道这里的文件Cocoa.h到底是什么内容,可以通过单击选中文件Cocoa.h来实现。
依次选择“File”→“Open Quickly…”命令,如图1-28所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00029001.jpg?sign=1739671571-b4tOZvqeiTq0qQxeAg7UlIGJGABBbkmw-0-77442700788cfafc0ccd688530265990)
图1-27 一个头文件
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00029002.jpg?sign=1739671571-KjrEbeBbhxx6c37lI0IDEGDmXq6gB0xn-0-0c29d0e5fada67245aafe09e2cf389e9)
图1-28 “Open Quickly…”命令
弹出如图1-29所示的对话框。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00029003.jpg?sign=1739671571-VFVdo5dMUDWd2REJyxgPEQa0pBoyAElt-0-951d670417a4e0850cfd106c0ff56e9f)
图1-29 “Open Quickly…”对话框
双击文件Cocoa.h的条目即可看到图1-30所示的界面。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00029004.jpg?sign=1739671571-QQ3FilTovzjCvxd4GuafdqAU8QYDzy6A-0-dfaf8a6f1fb6d5e317edb6ab068a66fa)
图1-30 文件Cocoa.h的内容
1.3.8 使用书签
使用Eclipse的用户会经常用到TODO标签,比如正在编写代码时需要做其他事情,或者提醒自己以后再实现的功能时,可以写一个TODO注释,这样在Eclipse的视图中可以找到,方便以后查找这个代码并进行修改。其实Xcode也有类似的功能,比如存在一段图1-31所示的代码。
这段代码的方法printInfomation是空的,暂时不需要实具体现。但是需要要记下来,便于以后查找并进行补充。可以让光标在方法内部,然后右击,选择“Add to Bookmarks”命令。如图1-32所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00030001.jpg?sign=1739671571-3IvKkQEuEbOC9TjBic0CDNipT8sxDzTW-0-921c82a7088552925fa2ecdcdc5e71ed)
图1-31 一段代码
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00030002.jpg?sign=1739671571-myC6TciBB3TAEirRf6tHchNqtzgLvObk-0-dd522d4fd6e206873d30704325f4cb53)
图1-32 选择“Add to Bookmarks”命令
此时会弹出以下对话框,可以在里面填写标签的内容,如图1-33所示。
这样即可在项目的书签节点中找到这个条目,如图1-34所示。此时单击该条目,可以返回刚才添加书签时光标的位置。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00030003.jpg?sign=1739671571-prmkRgXHj6752hd7avQhuHnOSHGQFVbX-0-96cb224e845dcd6439e270e9c51b0f71)
图1-33 填写标签的内容
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00030004.jpg?sign=1739671571-pV3o7SwyAyWxUJTwE2K721J1Gy6epfDJ-0-ba11fc12ac3a75fba99f7cb860c06e3e)
图1-34 在项目的书签节点找到这个条目
1.3.9 自定义导航条
在代码窗口上有一个工具条,可以提供很多方便的导航功能。如图1-35所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00030005.jpg?sign=1739671571-TyI3PlNRPhjiJ6xNZxeLtVZUXPG5GZdk-0-c219e1262690c2cc1b5a8f255152c2cf)
图1-35 导航条
也可以用来实现TODO的需求。这里有两种自定义导航条的写法。下面是标准写法。
#pragma mark
下面是Xcode兼容的格式。
// TODO:xxx
// FIXME:xxx
完整的代码如图1-36所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00031001.jpg?sign=1739671571-wBPxoUwRGm7VmvwZJaUI25g9tEJKsb9t-0-b672c5ad7a8ab5d6553c97f2bc25a1bd)
图1-36 完整的代码
此时会产生图1-37所示的导航条效果。
1.3.10 使用Xcode帮助
如果想快速地查看官方API文档,可以在源代码中按【Option】键并双击该类型(函数、变量等),图1-38所示的是SKTextureFilteringMode的API文档对话框。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00031002.jpg?sign=1739671571-kFgp0zSdwHAjBM5x4XVdCtenknzYhKyJ-0-c8aa5137ee9adaef7777d126f4bfb236)
图1-37 产生的导航条效果
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00031003.jpg?sign=1739671571-GlEvRyN4HkXVY33eAvAFFEKQHrgum279-0-d1797e588a07c9c96c05268a9ba434f4)
图1-38 SKTextureFilteringMode的API文档对话框
如果单击图1-38中标识的按钮,会弹出完整文档的窗口。如图1-39所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00032001.jpg?sign=1739671571-5Rm0kk3snAtpcCaHQNsAEGLhIYQPXtbk-0-b16215c0b9106526f508c2f94934729a)
图1-39 完整文档的窗口
1.3.11 调试代码
最简单的调试方法是通过NSLog打印出程序运行中的结果,然后根据这些结果判断程序运行的流程和结果值是否符合预期。对于简单的询问项目,通常使用这种方式即可。但是,如果开发的是商业项目,需要借助Xcode提供的专门调试工具。所有的编程工具的调试思路都是相同的。首先要在代码中设置断点,此时可以想象一下,程序的执行是顺序的,可能怀疑某个地方的代码出了问题(引发bug),可以在这段代码开始的地方,比如在方法的第一行,或者循环的开始部分,设置一个断点。程序在调试时会在运行到断点时中止,接下来可以一行一行地执行代码,判断执行顺序是否是自己预期的,或者变量的值是否和自己想的保持一致。
设置断点的方法非常简单,比如要对红框表示的行设置断点,可以单击该行左侧红圈位置。如图1-40所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00032002.jpg?sign=1739671571-gEtPLnEbg4Dw1Gl9KSSA2Cwhc4T5GLR5-0-ebbd289c5102861fd794356514f9e524)
图1-40 单击该行左侧红圈位置
单击后会出现断点标志,如图1-41所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00032003.jpg?sign=1739671571-nb1kVrz6e2ZvVu0G1bcNH7i8srZ6cI9R-0-be1799a8ed1fc46781b0b650933de6b3)
图1-41 出现断点标志
然后运行代码,比如使用“Command+Enter”命令,这时将运行代码,并且停止在断点处。如图1-42所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00033001.jpg?sign=1739671571-4CYDBbRYr73OLf74SE4eR3hEViUvLvQN-0-50dd450dd63e3a2ab928e40b80ba3aed)
图1-42 停止在断点处
可以通过“Shift+Command+Y”命令调出调试对话框,如图1-43所示。
![](https://epubservercos.yuewen.com/622D2B/14615805105581106/epubprivate/OEBPS/Images/img00033002.jpg?sign=1739671571-4wvIzuA8pXLwPwudnVKyN9EUcZEl2xSR-0-c771fcc12998e0f9fa289c58bfbf7014)
图1-43 调试对话框
这和其他语言IDE工具的界面大同小异,因为都具有类似的功能。下面是主要命令的具体说明:
continue:继续执行程序。
step over,step into,step out:用于单步调试,分别如下:
step over:将执行当前方法内的下一个语句。
step into:如果当前语句是方法调用,将单步执行当前语句调用方法内部的第一行。
step out:将跳出当前语句所在方法,到方法外的第一行。
通过调试工具,可以对应用做全面和细致的调试。