第二章 :Hello World 应用程序详解
译者注:由于本人英语水平有限,尽可能描述出作者的本意。如有错误,及时指出。文中会省略部分技术无关的赘述
“Any fool can know. The point is to understand.” – Albert Einstein
Hello World App 是怎么工作的
第一个app是不是很简单 ,我希望你喜欢第一章节, 并且已经建好第一个iPhone app。
在们继续解释IOS SDK之前 , 让我们停下来详细去探讨下Hello Word app 。 这会帮助你理解swift语言基础和应用程序内部运行原理 。
到目前为止你跟着我们一步一步创建了自己的Hello Word app ,你读完第一章 ,你应该在心里会有一些疑问:
storyboard中的控制器是怎么连接到我们的viewController.swift 的?
@IBAction 关键字是什么意思 ?
Hello Word按钮背后是怎样实现点击出发showMessage()方法的?
Run按钮在Xcode中是怎么工作的? 编译app是啥意思 ?
我想把重点放在探索Xcode环境上 ,所以我并没有解释上面的问题 。然而对每一个程序员来说 , 了解背后细节和把握IOS编程的基本概念都是必不可少的 。 计数概念也有优点难理解,特别如果你没有编程经验 。别担心,这只是开始 。继续学习 ,写更多的代码 。你将会对IOS编程有更深入的理解 。你只要尽你的努力去学习就好了。
我们来看一个现实生活中的例子 。
一个电视遥控器 ,它能无线远程方便的控制电视的音量。想要换台, 你只要点下对应的号码 ,想要增加音量 只要按下音量+就好了 。
我问你 ,你知道你按按钮后发生了什么吗 ?也许不知道 , 我想大多数人不知道远程遥控怎么控制电视 。你也许想着 遥控发送一个确定的信息给电子 触发电视去增加音量或者换台 。
在这个示例中,按钮与你交互就相当于隐藏在按钮背后的实现细节 。 界面和实现部分沟通是通过message
这个概念也可以被应用到IOS编程中。storyboard中的用户界面是接口(interface) ,代码是具体的实现(implementation) .用户界面元素 (eg .button )跟代码交互式通过message
如果你返回Hello World 项目 ,你添加在试图上的按钮就是 接口(interface) . viewController中的showMessage() 方法就是实现(implementation) 。当某人点击了按钮 ,就会给viewController 类发送一个信息去调用 showMessage()方法 。
我们刚刚证明的是一个面向对象中非常重要的概念 —封装 , 实现的showMessage()方法被隐藏起来 。Hello World按钮不知道它内部怎么工作 。 它只知道那个方法需要发送一个信息 。 showMessage()处理其他事情(展示”Hello Word”信息) 。
Behind the Touch
现在你已经知道界面上的UI和后台的代码是通过messag交互 ,我们来看看用户点击了Hello Word按钮后到底发生了什么 。Hello Word按钮式怎样盗用showMessage()方法的 .
还记得怎样去建立界面上按钮和后台代码连接的 ?再次打开 Main.storyboard 选择Hello World 按钮 。点击untility区域下面的Connection Inspector按钮 。在Sent Events区域 ,你应该可以找到可用事件列表以及他们的响应方法 。”Touch Up Inside” 事件连接到了showMessage()
方法
在IOS中 , 应用程序是基于事件驱动编程的 。不管是一个系统对象 ,还是UI对象 。它监听某些事件,以确定该应用程序的流程 。针对UI对象(比如 按钮) ,它可以监听一个特定的触摸事件 。当这个事件被出发 , 对象将会去嗲用预先设定好得关联这个事件的方法 。
在Hello Word App中 ,当用户抬起手指放在按钮上,”Touch Up Inside “事件被触发 。因此,它调用了showMessage()方法去展示信息 。我们为了避免意外所以使用了”Touch Up Inside “事件而没有使用”Touch Down”,上面的插图展示了 事件流和我上面描述的。
showMessage 方法中的代码
你现在应该对IOS编程有一个更好的理解了 , 但是showMessage 方法中的代码 是什么意思呢 ?
首先最重要的是:什么是方法?如前所述 , 大多数代码在app中以某种方式处理一些种类的对象。每个对象提供特定的函数完成特定的任务 (比如在界面展示信息)。
现在,我们来详细看看showMessage()方法
这里讲述了swift基本语法 ,不再赘述 。。
这里还有个关键字我们还没有讨论 ,@IBAction
。这个关键字允许我们连接代码和Interface Builder 的界面对象 。当这个关键字被放在方法声明前 ,就意味着这个方法暴露给了interface Builder 。这就是为什么我们在第一章连线的时候 showMessage()会出现在弹出的框中。
当我们开发一款APP ,我们不需要自己写所有的方法 ,比如我们不需要写怎样画一个弹出框框在界面上 。你可以利用IOS提供的SDK 去做一些繁重的任务 。IOS自带多种框架和工具包让你变的轻松 。 UIKit 提供了很多类来构建和管理你的应用程序的用户界面
这里我们依靠UIAlertController
去创建一个Hello World 信息 。UIAlertController
可以展示一个弹出信息 。第一行创建了一个UIAlertController
对象 。你指定类名,随后一组初始化属性的值 。这里我们制定了title、message、style
let alertController = UIAlertController(title: "Hello World",message: "Hello World",preferredStyle: UIAlertControllerStyle.Alert)
在创建UIAlertController对象后 ,我们调用了addAction 去使它展示一个OK按钮 ,在swift中调用方法用dot(点 .)
alertController.addAction(UIAlertAction(title: "OK",style: UIAlertActionStyle.Default,
handler: nil))
你可能疑惑你改怎样制定类中有哪些方法 还有这些方法的用法 。
在Xcode 中,按住option 将光标指向类名然后点击 。会出现这个类描述的信息框 。你可以点击下面Reference 获取更多信息 。
配置好UIAlertController后 , 最后一行代码是把它显示在界面上
self.presentViewController(alertController,animated: true,completion: nil)
在swift中 ,使用self表示当前对象 。我们使用当前对象去展示alertController 加上动画。
View Controller 和类之间的关系
storyboard中的控制器是怎么连接到我们的viewController.swift 的?
整件事情看起来并不重要,但事实并不是这样的 。其实这个控制器在我们创建”Single View Application”的时候自动连接到ViewController.swift 。
进入storyboard , 选择view controller ,在Utility区域 ,选择Identity Inspector 按钮。你将会发现ViewControlle被设置位自定义类中。 这就是用户界面控制器怎么和swift类连接起来的
Run按钮的幕后工作
最后我想谈一下Run按钮 , 当你点击了Run 按钮Xcode 自动运行模拟器 。但是背后到底发生了什么 , 作为一个开发者你应该了解所有详细的事情。
整个项目可以被分为三个阶段 :编译 、打包、运行
编译 : 你也许会认为IOS了解swift语言 ,但事实上,IOS之会读机器语言,swift是让开发者读和写的 。为了让IOS了解app的源码 ,这里需要一个转换过程,把swift语言转换成机器语言。这一过程被称作”编译” 。Xcode中已经自带了一个内置的编译器来编译代码 。
打包:除了源代码 , 一个app经常还包含资源文件 ,比如图片 ,文本文件 ,声音文件等等 。这些资源被打包后组成一个app 。我们一般把这两个过程叫”Build”
Run:启动模拟器加载用用程序