描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787302427292
本书以深浅有序的规划,贴切易懂的范例,引导读者快速进入程序设计语言学习的领域;以讲解全新Xcode 6.X环境进行Swift的iOS 8 App开发、仿真器应用与实机测试,并提供Apple开发者账号申请全攻略;以实例导入Swift语法,介绍iOS App开发观念与实践,利用步骤拆解、流程分析与图标表现,用有趣易懂的方式学会核心开发技巧。
目 录
第1章
轻易进入iOS App设计殿堂 1
1.1 功能强大的Swift语言 2
1.1.1 Swift语言的诞生 2
1.1.2 Swift语言的特色 3
1.2 开发前的准备工作 3
1.2.1 硬件 3
1.2.2 申请开发者账号 4
1.2.3 安装 Xcode 软件 7
1.3 与 iOS App次接触 10
1.3.1 创建新项目 10
1.3.2 项目文件浏览 13
1.3.3 Main.storyboard界面配置 14
1.3.4 在仿真器执行应用程序 15
第2章
与应用程序互动:基本组件 20
2.1
Label组件 21
2.1.1 Label组件的常用属性 21
2.1.2 新增范例项目 23
2.1.3 拖动创建Label组件 26
2.1.4 用程序代码创建Label组件 27
2.1.5 Xcode集成环境的自动完成功能 29
2.2 文字组件 31
2.2.1 Text Field组件的常用属性 31
2.2.2 Text View组件的常用属性 33
2.3
Button组件 35
2.3.1 Button组件的常用属性 35
2.3.2 调整程序设计区的大小 37
2.3.3 程序代码与界面组件 38
2.3.4 Button组件触发事件的处理程序 41
2.4 多按钮共享事件处理方法 43
2.4.1 创建共享事件处理方法 44
2.4.2 共享事件处理方法的应用:电话键盘 45
2.4.3 用程序代码创建多个按钮组件 47
第3章
让应用程序更生动:进阶组件 52
3.1
ImageView 组件 53
3.1.1 ImageView组件的常用属性 53
3.1.2 自动播放图片 59
3.1.3 图片特效:框线、圆角和阴影 62
3.2
DatePicker组件 66
3.2.1 DatePicker 组件的常用属性 66
3.2.2 程序设置DatePicker属性 68
3.2.3 Stepper组件 73
3.2.4 NSTimer类与倒数计时 74
3.3 其他高级组件 79
3.3.1 Switch组件 79
3.3.2 Slider组件 80
3.3.3 Progress
View组件 83
第4章
让资料井然有序:表格组件 86
4.1 表格组件Table View 87
4.1.1 Table View的常用属性 87
4.1.2 创建动态方式的单元格 87
4.1.3 设置Table View和 dataSource、delegate的连接 90
4.1.4 加入表格数据 90
4.2 创建个Table View项目 92
4.3 单元格的选取和指示器的使用 95
4.3.1 单元格的选取 95
4.3.2 单元格指示器 97
4.4 编辑单元格 101
4.4.1 新增一笔数据 102
4.4.2 删除一笔数据 102
4.4.3 单元格的拖动 103
4.5 自定义单元格 107
4.6 创建静态方式的单元格 113
4.7
Collection View网格组件 115
第5章
给点提示吧:对话框及程序调试 120
5.1 对话框UIAlertView 121
5.1.1 认识 UIAlertView 组件 121
5.1.2 创建 UIAlertView 122
5.2 对话框按钮触发的事件 126
5.2.1 设置对话框事件处理 127
5.2.2 用对话框输入账号、密码 129
5.3 程序调试 132
5.4 断点 134
第6章
海阔天空任遨游:网页组件 140
6.1 网页组件 Web View 141
6.1.1 Web View的常用方法 141
6.1.2 loadRequest 方法 141
6.1.3 loadHTMLString 方法 142
6.1.4 loadData方法 143
6.1.5 综合演练:网页浏览 143
6.2 多页面的项目 145
6.2.1 新增页面 146
6.2.2 页面切换 147
6.3 不同页面间的数据传递 149
6.3.1 用Segue 传递数据到第二个页面 149
6.3.2 用delegate委托传递数据回到个页面 150
6.4 综合范例 154
6.4.1 使用开放数据平台 154
6.4.2 综合演练:去台北住一晚App制作 156
第7章
善用系统样板提高开发效率 166
7.1
Master-Detail样板 167
7.1.1 创建 Master-Detail 项目 167
7.1.2 Master-Detail样板内容 169
7.1.3 Master-Detail 样板的应用 174
7.2
Page-Based样板 179
7.2.1 创建Page-Based项目 179
7.2.2 Page-Based样板内容 180
7.2.3 Page-Based样板的应用 183
7.3
Tabbed样板 185
7.3.1 创建Tabbed项目 185
7.3.2 Tabbed样板内容 186
7.3.3 Tabbed样板的应用 187
第8章
保存心血结晶:文件存取 193
8.1
NSUserDefaults类 194
8.1.1 NSUserDefaults类简介 194
8.1.2 存取NSUserDefaults数据 196
8.2 读取项目中的文件 199
8.2.1 沙箱(Sand Box)机制 200
8.2.2 读取项目中的图片文件 200
8.2.3 读取项目中其他类型的文件 201
8.3 项目动态文件 205
8.3.1 创建文件或目录 206
8.3.2 检查文件是否存在以及读写文本文件 207
8.3.3 文件列表 211
8.3.4 管理文件和目录:复制、移动及删除 211
8.3.5 综合演练:记事本 212
第9章
结构化资料存取:资料库 219
9.1
SQLite数据库 220
9.1.1 认识SQLite数据库 220
9.1.2 加入SQLite程序库 220
9.1.3 读取SQLite数据库 223
9.1.4 管理SQLite数据库 230
9.1.5 综合演练:用Sqlite管理学生数据 231
9.2
Core Data数据库 240
9.2.1 认识Core Data数据库 240
9.2.2 创建Core Data数据库实体 240
9.2.3 新增和读取Core Data数据 242
9.2.4 管理Core Data数据库 246
9.2.5 综合演练:用Core Data管理学生数据 247
第10章
动动手指就完成工作:手势 252
10.1
手势 253
10.1.1 轻敲(Tap)手势组件 253
10.1.2 缩放(Pinch)手势组件 254
10.1.3 旋转(Rotation)手势组件 256
10.1.4 挥击(Swipe)手势组件 258
10.1.5 拖动(Pan)手势组件 260
10.1.6 长按(Long Press)手势组件 262
第11章
来点影音调剂心情——多媒体 264
11.1
照相和图片的选取 265
11.1.1 照相功能 265
11.1.2 图片的选取功能 266
11.1.3 综合演练:照相及选取相片 267
11.2
声音的相关功能 271
11.2.1 AVAudioPlayer类 271
11.2.2 播放项目中的音频文件 272
11.2.3 MPMoviePlayerController类 277
11.2.4 播放网络音频文件 277
11.2.5 MPMusicPlayerController类 280
11.2.6 播放移动设备内的音乐文件 281
11.2.7 AVAudioRecorder类 286
11.2.8 录制音频 287
11.3
视频的相关功能 294
11.3.1 摄制视频 294
11.3.2 播放项目中的视频文件 297
第12章
快乐去旅行吧:位置及地图 301
12.1
CoreLocation 302
12.1.1 认识CoreLocation 302
12.1.2 获取当前的方位 309
12.2
地图MapKit View 313
12.2.1 认识MapKit View 313
12.2.2 显示内建地标 317
12.2.3 创建自定义地标 321
12.3
路径规划 327
12.3.1 认识 MKMapItem 327
12.3.2 MKMapItem的常用方法 328
附录 iOS实机测试 331
A.1 关于iOS的实体机测试 332
A.1.1 申请和设置流程 332
A.1.2 申请和设置的注意事项 332
A.2 申请iOS开发者账号 332
A.2.1 申请Apple ID 333
A.2.2 加入开发者账号 335
A.3 注册付费的iOS Developer Program 338
A.4 创建并安装开发者凭证文件 343
A.4.1 创建开发证书颁发机构要求文件 343
A.4.2 下载并安装WWDR凭证 345
A.4.3 下载开发证书颁发机构文件 346
A.5 注册开发的设备 348
A.6 实体机测试 349
前 言
苹果(Apple)公司在WWDC 2014发表了新的程序设计语言Swift之后,为许多曾经学习Objective-C但又因为其复杂语法受到挫折的开发者们开启了另一扇光明的窗口。Swift是一种适用于开发iOS与Mac OS应用的全新程序设计语言,相对于Objective-C的深奥复杂,Swift在学习与实际运用上就简单方便多了,因此Swift在发布不久就吸引了全球众多的开发者投入研究和使用。
过去有许多iOS App程序开发的初学者,刚一开始都会因为账号申请的复杂以及开发环境部署的困难,失去了学习的热忱。而在好不容易克服这些困难之后,进入开发实践时,又会因为陌生的程序语法,以及复杂的集成开发环境而打乱了整个学习的节奏,还没有享受到程序开发所带来的成就感,就因为一连串的挫折打击而失去了继续学习的动力。有没有更好的学习过程或方式呢?
本书希望能以深浅有序的规划,贴切易懂的范例,引导读者进入程序设计语言学习的领域。面对Swift的新挑战,作者仍然保持一贯的写作风格,首先是将程序开发之前相关软件的安装、环境的部署与测试的步骤进行详细的说明,并列举出作者们在测试时曾遇到问题的解决心得。接下来在学习的过程中,我们不将重点放在程序语法的讲解与说明上,而先将Swift在开发iOS App时的重要步骤按程序设计的难易与深浅程度进行归类,化为不同的章节的主结构,再按每个重点内容,编排和设计了易懂并且容易操作的相关程序范例,读者只要跟着书上的步骤进行操作即可获得结果,从中学习程序设计时采用的方法。这样,初学者不会只能望着一行一行的程序代码,不知如何下手,而是能够在图文并茂的说明与引导下,完成学习的各个环节并享受实践的喜悦。
除此之外,我们还准备了相关的教学视频与操作范例文件,供读者下载使用让读者在学习的过程中更加顺畅而充实。废话不多说了,让我们一起学习Swift吧!
文渊阁工作室
邓文渊
第5章 给点提示吧:对话框及程序调试
UIAlertView组件可以显示对话框,制作按钮与用户互动,直到用户单击按钮后才关闭对话框并响应用户的按钮动作。
UIAlertViewStyle属性,可以设置对话框的样式,只要将属性设置为LoginAndPasswordInput,对话框中就会同时提供一个PlainTextInput和一个SecureTextInput,让用户输入账号和密码。
一般语法的错误中常发生的是程序代码的输入错误,例如大小写不符、变量命名错误、找不到组件,或是类继承后却未按规定实现,这些错误通常会将鼠标指到错误的位置,再按照提示的错误信息进行修正。
5.1 对话框 UIAlertView
应用程序在执行过程中常会需要显示一个小信息告知用户一些必要信息,再根据用户响应内容进行适当的处理。
5.1.1 认识
UIAlertView 组件
UIAlertView组件可以显示对话框,制作按钮与用户互动,直到用户按下按钮后才关闭对话框并响应用户的按钮动作。
UIAlertView的常用属性和方法,如表5-1所示。
表5-1 UIAlertView常用属性和方法
UIAlertView默认构造函数语法
init(title:String?, message:String?,
delegate:AnyObject?,
cancelButtonTitle:String?)
- 如果要获取单击按钮的操作,delegate参数必须设置为self,否则设置nil即可。
- cancelButtonTitle为个按钮,通常会加上按钮文字。
UIAlertView组件的基本样式
UIAlertView组件的基本样式,如图5-1所示。
图5-1 UIAlertView组件的基本样式
对话框通常会显示标题、对话框的内容和按钮,按钮也可以同时创建多个。
5.1.2 创建
UIAlertView
创建UIAlertView主要有两种方式。
(1)继承UIAlertViewDelegate后,以构造函数创建UIAlertView对象,再用show()方法显示,语法如下:
var 变量名称 :UIAlertView = UIAlertView(title: 窗口标题 ,
message: 显示信息 , delegate: 委托对象 ,cancelButtonTitle: 个按钮文字 ,
[otherButtonTitles: 第二个按钮文字,其他按钮一,?]) 变量名称 .show()
cancelButtonTitle为创建的个按钮及按钮文字,默认少要创建cancelButtonTitle按钮,否则会产生错误。
otherButtonTitles可以创建其他更多的按钮和按钮文字,如果按钮有多个,每个按钮以“,”号分隔。请注意:otherButtonTitles创建按钮的位置是从上面按序往下排列。
按钮的排列
用构造函数创建对话框,会因为按钮数目不同而有不同的排列方式。当只有一个cancelButtonTitle按钮时,按钮排列在中间;如果对话中有两个按钮,cancelButtonTitle按钮的位置则是在左方;但如果按钮太多,例如3个按钮或3个按钮以上,按钮会以垂直方式排列,此时cancelButtonTitle按钮的位置是在下面而不是上面。
例如:创建只包含一个cancelButtonTitle按钮的对话框,如图5-2所示。
图5-2 只含一个按扭的对话框
var alertView:UIAlertView = UIAlertView(title:
” 窗口标题 “,
message: ” 这是样式默认为
Default 对话框。”,
delegate:self, cancelButtonTitle: ” 个按钮 “)
alertView.show()
例如:创建包含cancelButtonTitle和一个otherButtonTitles按钮的对话框,如图5-3所示。
图5-3 包含cancelButtonTitle和一个otherButtonTitles按钮的对话框
var alertView:UIAlertView = UIAlertView(title:
” 窗口标题 “,
message: ” 这是样式默认为
Default 对话框。”,
delegate:self, cancelButtonTitle: ” 个按钮 “, otherButtonTitles:” 第二个按钮 “)
alertView.show()
例如:创建4个按钮的对话框,如图5-4所示。
图5-4 包含4个按钮的对话框
import UIKit
class ViewController:
UIViewController,UIAlertViewDelegate { override func viewDidLoad() {
super.viewDidLoad()
// 用构造函数创建
var alertView:UIAlertView = UIAlertView(title: ” 窗口标题 “,
message: ” 这是样式默认为 Default 对话框。”,
delegate:self, cancelButtonTitle: ” 个按钮 “,
otherButtonTitles:” 第二个按钮 “,” 第三个按钮 “,” 其他按钮 “)
alertView.show()
}
}
继承UIAlertViewDelegate后,创建UIAlertView对象,设置其属性,并用addButtonWithTitle()方法加入按钮,再用show()方法显示。
用addButtonWithTitle()把按钮加入对话框,当只有一个或两个按钮时,按钮排列方式和用构造函数创建的对话框相同,但如果按钮太多,例如3个按钮或3个按钮以上,按钮会以垂直方式由下往下排列,此时个创建按钮的位置在上面,如图5-5所示。
例如:前面的范例,用addButtonWithTitle()方法加入按钮的方式来创建。
图5-5 3个或3个以上按钮垂直排列
import UIKit
class ViewController:
UIViewController,UIAlertViewDelegate { override func viewDidLoad() {
super.viewDidLoad()
// 创建对象并设置其属性和按钮
var alertView:UIAlertView = UIAlertView() alertView.title = ” 窗口标题 “
alertView.message = ” 这是样式默认为 Default 的对话框。”
alertView.delegate = self
alertView.addButtonWithTitle(” 个按钮 “)
alertView.addButtonWithTitle(” 第二个按钮 “)
alertView.addButtonWithTitle(” 第三个按钮 “)
alertView.addButtonWithTitle(” 其他按钮 “)
alertView.show()
}
}
用addButtonWithTitle()方法加入的按钮,会按加入的顺序从上往下排列。
范例:显示对话框
单击“显示对话框(一)”按钮,用init()构造函数创建对话框;按下“显示对话框(二)”钮,则创建UIAlertView对象,设置其属性,并用addButtonWithTitle()方法加入按钮的方式创建对话框,如图5-6所示()。
图5-6 显示对话框
» 界面配置
创建Single View项目,项目名称为“”。
打开Main.storyboard,分别加两个Button组件,如图5-7所示。
图5-7 添加Button组件
» 程序代码(ViewController.swift)
1 import
UIKit
2
3 class
ViewController: UIViewController,UIAlertViewDelegate {
4
5 @IBAction
func alert1Click(sender: UIButton) {
6 // 用构造函数创建
7 var
alertView:UIAlertView = UIAlertView(title: ” 确认窗口 “, message: ”
确定要结束应用程序吗 ?”, delegate:nil,
cancelButtonTitle: ” 取消 “,otherButtonTitles:” 确定 “)
8 alertView.show()
9 }
10
11 @IBAction
func alert2Click(sender: UIButton) {
12 // 创建对象并设置其属性和按钮
13 var
alertView:UIAlertView = UIAlertView()
14 alertView.title
= ” 确认窗口 ”
15 alertView.message
= ” 确定要结束应用程序吗
?”
16 alertView.delegate
= nil
17 alertView.addButtonWithTitle(”
取消 “)
18 alertView.addButtonWithTitle(”
确定 “)
19 alertView.show()
20 }
21~ 31 略
32 }
- 第3行,继承UIAlertViewDelegate。
- 第5~9行,单击“显示对话框(一)”按钮,用init()构造函数创建对话框。
- 第11~20行,单击“显示对话框(二)”按钮,创建UIAlertView对象,设置其属性,并用addButtonWithTitle()加入按钮的方法创建对话框。
5.2 对话框按钮触发的事件
单击对话框按钮,会触发alertView(alertView,clickButtonAtIndex)事件,个参数alertView为触发的对象,第二个参数clickButtonAtIndex为按钮的索引值。只要依据按钮的索引值,即可以作对应的处理。请注意:要处理对话框的按钮事件,delegate必须设为self,若设为nil,将不会加以处理。
5.2.1 设置对话框事件处理
范例:对话框事件处理
单击“显示对话框”按钮,创建UIAlertView对象,并以addButtonWithTitle()方法加入按钮的方式创建对话框;在对话框中创建“取消”和“确定”两个按钮,单击“取消”和“确定”按钮,分别处理其触发事件,同时将按钮的文字返回labelResult卷标中显示,如图5-8所示。()
图5-8 对话框事件处理
» 界面配置
创建Single View项目,项目名称为。
打开Main.storyboard,加入一个View组件和一个Label组件,然后在View组件中再加入一个Button组件,如图5-9所示。
图5-9 界面配置
» 程序代码(ViewController.swift)
1 import
UIKit
2
3 class
ViewController: UIViewController,UIAlertViewDelegate {
4 @IBOutlet
weak var buttonView: UIView!
5 @IBOutlet
weak var labelResult: UILabel!
6 var
buttonTitle:String = “”
7
8 override
func viewDidLoad() {
9 super.viewDidLoad()
10 // 设置圆角按钮
11 buttonView.layer.cornerRadius
= 10 // 圆角角度
12 }
13
14 // 单击按钮
15 @IBAction
func buttonAlertClick(sender: UIButton) {
16 // 创建对象并设置其属性和按钮
17 var
alertView:UIAlertView = UIAlertView()
18 alertView.title
= ” 确认窗口 ”
19 alertView.message
= ” 确定要结束应用程序吗
?”
20 alertView.delegate
= self
21 alertView.addButtonWithTitle(”
取消 “)
22 alertView.addButtonWithTitle(”
确定 “)
23 alertView.show()
24 }
25
26 func
alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){
27 // 获取按钮的文字
28 buttonTitle
= alertView.buttonTitleAtIndex(buttonIndex)
29 labelResult.text=(”
您按下了
(buttonTitle) 按钮 “)
30 switch
(buttonIndex) {
31 case
0: // 单击“取消”按钮的处理
32 println(”
取消 “)
33 break
34 case
1: // 单击“确定”按钮的处理
35 println(”
确定 “)
36 break
37 default:
// 其他的状况
38 println(”
错误 “)
39 }
40 }
41
42 }
- 第3行,继承UIAlertViewDelegate。
- 第4行,将创建的View命名为buttonView,再于第11行中设置其圆角外型,让按钮以圆弧型按钮呈现。
- 第5行,以labelResult显示单击对话框按钮后的结果。
- 第6行,创建buttonTitle变量保存对话框按钮的文字。
- 第11行,设置View圆角外型。
- 第15~24行,创建对话框。
- 第20行,要触发对话框按钮事件,delegate必须设为self。
- 第26~40行,对话框按钮的触发事件。
- 第28行,获得按钮文字。
- 第29行,显示结果。
- 第30~39行,单击“取消”、“确定”按钮的处理。
5.2.2 用对话框输入账号、密码
UIAlertViewStyle 属性,可以设置对话框的样式,只要将属性设置为LoginAndPasswordInput,对话框中就会同时提供一个PlainTextInput和一个SecureTextInput,让用户输入账号和密码。
使用textFieldAtIndex(index)方法,可以获取UITextField类型的文本框,index=0会获取个文本框,index=1则获取第二个文本框,后再用text属性即可获取文本框的内容。以LoginAndPasswordInput为例,index=0会获取账号,index=1则会获取密码。
范例:用对话框输入账号、密码
单击“登录系统”按钮,显示对话框,在对话框中输入正确账号“David”和密码“1234”后单击“登录”按钮,会在labelResult卷标中显示“欢迎光临”信息,否则显示“账号、密码错误”信息,如图5-10所示。()
图5-10 用对话框输入账号、密码
» 界面配置
创建Single View项目,项目名称为“”。
打开Main.storyboard,加入一个View组件和一个Label组件,然后在View组件中再加入一个Button组件,如图5-11所示。
图5-11 界面配置
» 程序代码(ViewController.swift)
1 import
UIKit
2
3 class
ViewController: UIViewController,UIAlertViewDelegate {
4 @IBOutlet
weak var buttonView: UIView!
5 @IBOutlet
weak var labelResult: UILabel!
6 let
UserName:String = “David” // 账号
7 let
Password:String = “1234” // 密码
8
9 override
func viewDidLoad() {
10 super.viewDidLoad()
11 // 设置圆角按钮
12 buttonView.layer.cornerRadius
= 10 // 圆角角度
13 }
14
15 // 单击按钮
16 @IBAction
func buttonAlertClick(sender: UIButton) {
17 // 用构造函数创建对话框
18 var
alertview=UIAlertView(title: ” 登录 “,
19 message:
” 欢迎光临 !”,
20 delegate:
self,
21 cancelButtonTitle:
” 取消 “,
22 otherButtonTitles:”
登录 ”
23 )
24 // 可输入账号和密码
25 alertview.alertViewStyle=UIAlertViewStyle.LoginAndPasswordInput
26 alertview.show()
27 }
28
29 func
alertView(alertView: UIAlertView!, clickedButtonAtIndex
buttonIndex: Int){
30 switch
(buttonIndex) {
31 case
0: // 按下“取消”钮的处理
32 break
33 case
1: // 按下“登录”钮的处理
34 var
textUserName:UITextField = alertView.textFieldAtIndex(0)!
35 var
textPassword:UITextField = alertView.textFieldAtIndex(1)!
36 if
(UserName == textUserName.text && Password == textPassword.text){
37 labelResult.text=(”
欢迎光临:
(textUserName.text)”)
38 }else{
39 labelResult.text=(”
账号、密码错误
!”)
40 }
41 break
42 default:
// 其他的状况
43 println(”
错误 “)
44 }
45 }
46
47 }
- 第3行,继承UIAlertViewDelegate。
- 第4行,将按钮置于圆弧型View组件中。
- 第6~7行,设置账号和密码。
- 第16~27行,创建具有输入账号和密码文本框的对话框。
- 第25行,设置对话框的输入样式。
- 第29~45行,对话框按钮的触发事件。
- 第33~41行,单击“登录”按钮的处理,对比账号密码是否正确。
- 第34~40行,用textFieldAtIndex()方法获取UITextField类型的文本框,再用text属性获取文本框的内容。
5.3 程序调试
一个应用程序即使在设计期间编译都正确无误,但是到了运行期间,还是可能会发生一些无法预期的错误,例如:输入的数据类型不符、除数为0、打开的文件不存在、联网失败、数组的下标超出范围等等。
如何调试一直是程序设计师困扰的问题,而且没有良好的调试技巧,当面对大型或复杂的程序时,将会束手无策。
Swift应用程序错误的种类大致可分为语法错误、逻辑错误和执行时的错误,以下就各个状况进行说明。
语法的错误
一般语法的错误常发生的是程序代码输入错误,例如大小写不符、变量命名错误、找不到组件,或是类继承后却未按规定实现,这些错误通常可以将鼠标指到错误的位置,再按提示的信息进行修正。例如:变量str误打为s产生Use of unresolved identifier ‘s’的错误,如图5-12所示。
图5-12 提示错误的信息
查询文件
Swift的语法太复杂,用户很难记住它的语法,通常查询文件是非常必要掌握的技巧,简单的方式就是在所要查询的类上按住Command钮。此外,Swift也提供了另一种文件的查询方法,在主菜单上,单击Windows/Documentation and API Reference打开Documentation and API Reference窗口,然后输入要查询的信息,例如:查询AlertView类的使用方法,如图5-13所示。
图5-13 查询AlertView类
利用调试信息区显示信息
有经验的程序设计师,经常会利用程序调试信息区(Debug area),显示一些重要的信息,了解程序执行的状况,println()方法就是常使用的方式。
类型错误的处理
Swift的类型定义非常严谨,当类型不对时,将会产生错误。要解决这个问题,可以将变量声明为Optional类型,当发生类型错误时,用println()输出信息来检验之。
例如:用textNum文本框输入n的值来求1 2 3 … n之和,当文本框输入正确数值时可正常运算,然而当文本框未输入数据或输入的类型为文字时,将会产生错误。范例中,将变量n声明为Optional类型来处理,当发生类型错误时,就输出“类型错误!”信息,如图5-14所示。
图5-14 提示“类型错误”信息
var n:Int? = textNum.text.toInt()
if n == nil{
println(“类型错误 !”)
} else{
// 求 1 2 3 ? n 之和
}
- var n:Int声明n为Optional类型,当发生类型错误时,n的值为nil。
5.4 断点
如果需要仔细追踪程序执行过程中变量或对象的内容,可以使用断点的设置,再利用Debug调试信息区来观察。
所谓断点,就是在程序的关键处加入停止点,当程序执行到该处时会暂停,开发者可以观察程序执行到此的变量、数组的值或内容,对于程序调试是相当重要的工具。
设置断点
在程序左边,单击鼠标左键会出现蓝色的箭头,表示将该行程序设置为断点,应用程序执行到此设置的断点,即会中断并停留在此断点上。例如:在第9行设置断点,如图5-15所示。
图5-15 在第9行设置断点
取消断点
在已设置的断点上,再单击,该断点会变成灰色,表示取消该断点。例如:取消第9行断点,如图5-16所示。
图5-16 取消断点
删除断点
在断点处单击鼠标右键,在快捷菜单上单击Delete BreakPoint,即可将断点的设置删除。例如:删除第9行设置的断点,如图5-17所示。
图5-17 删除断点
程序调试信息区操作
程序调试信息区标题上提供调试的图标,方便程序调试,如图5-18所示。
图5-18 调试图标
①Toggle global beaakpoints state:断点状态切换,用以控制断点是否要起作用。②Continue program execution:继续执行程序。③Step Over:单步执行。④Step
Into:进入方法或函数之中。⑤Step Out:离开目前的方法或函数。⑥显示对象和变量的信息。例如:变量n为Int?类型,其值等于5。
程序调试信息区左半部显示对象和变量信息,右半部则可以显示println()输出信息。对象和变量,也可以单击图标展开。例如:展开self可看到其中包含的对象,如图5-19所示。
图5-19 self中包含的对象
范例:以调试模式观察变量
用户输入数字n,单击“计算”按钮,程序会计算1 2 3 ? n之和,利用调试模式观察数字相加的过程。()
输入5后单击“计算”按钮,得到结果15,输入空白或非数值,显示“类型错误”信息,如图5-20所示。
图5-20 计算结果与错误信息提示
» 界面配置
创建Single View项目,项目名称为。
打开Main.storyboard,加入两个Label组件、一个textField组件和一个Button组件,如图5-21所示。
图5-21 界面配置
» 程序代码(ViewController.swift)
1 import
UIKit
2
3 class
ViewController: UIViewController {
4 @IBOutlet
weak var textNum: UITextField!
5 @IBOutlet
weak var labelResult: UILabel!
6
7 @IBAction
func buttonClick(sender: UIButton) {
8 var
n:Int? = textNum.text.toInt()
9 if n
!= nil{
10 var
total:Int = calaulate(n!)
11 labelResult.text
= ” 总和
=(total)”
12 }else{
13 println(”
类型错误 !”)
14 }
15}
16
17 func
calaulate(n:Int) -> Int {
18 // 求 1 2 3 ? n 之和
19 var
sum:Int = 0
20 for
var i:Int=0; i<=n; i {
21 sum
= sum i
22 }
23 return
sum
24 }
25
26 }
加入断点进行观察
请使用鼠标在的第9、10、21行分别设置断点,然后单击工具栏上的图标执行该项目。
在textNum文本框中输入5,然后单击“计算”按钮,程序停在第9行的中断点上,并自动打开Debug Area窗口。在Debug Area可观察到变量n的值为5,也可以将鼠标移到要观察的变量上,将会显示该变量的值,如图5-22所示。
图5-22 显示变量的值
单击调试信息区的“单步执行”图标一次,程序停在第10行的断点上,准备执行calculate函数,这时total变量的值为0,如图5-23所示。
图5-23 单步执行
单击调试信息区的“继续执行”图标一次,程序停在第21行的断点上,表示执行已进入calculate函数,这时sum、i变量的值均为0,如图5-24所示。
图5-24 继续执行
再按“单步执行”图标,程序会在20~22行的for循环中单步执行,这时就可以观察sum、i变量。例如:按下键6次,变量sum=1、i=2,如图5-25所示。
图5-25 观察sum、i变量
也可以在执行过程中,再新增断点或删除已设置的断点。为了要快速离开for循环,请先用鼠标单击第21行的断点,该断点会变成灰色,表示已取消该断点,如图5-26所示。
图5-26 取消断点
然后单击“继续执行”图标一次,这时程序就会离开for循环,继续执行后面的程序代码,后将总和total变量的值15显示在labelResult卷标上,如图5-27所示。
图5-27 在卷标上显示结果
评论
还没有评论。