Swift的一些翻译3:Hello World App的解释

Chapter 4

Hello World App的解释

做一个app简单吗?我希望你享受第一章的阅读并且已经制作了你的第一个iPhone app.

在我们继续探索iOS SDK之前,我们暂停一下来近距离的看下这个Hello World app.这对你理解Swift语言的基础和app的内部工作情况来说很有帮助.

迄今为止,你跟着一步一步的来制作Hello World app.像你通过阅读这一章,你可能会在脑海里有一些疑问:

  • storyboard里的ViewController是这怎么和ViewController类里面的ViewController.swift文件联系上的呢?

  • showMessage()方法里面的代码块的意思是什么?它是怎样告诉iOS来显示一个Hello World信息的?

  • @IBAcation 关键字的意思是什么?

  • "Hello World"按钮背后是什么?按钮是怎样察觉轻触然后触发showMessage()方法的?

  • 运行按钮在Xcode是怎样工作的?你说的"编译一个app"是什么意思?

之前我想让你专注于探索Xcode环境所以我没有解释任何以上的问题.然而,对每个开发者来说,理解代码背后的细节和领会iOS编程的基本概念是至关重要的.技术概念可能会有点难理解,特别是,如果你之前没有任何编程经验.不要担心这刚刚开始.在之后的章节,随着你继续学习和写更多的代码,你将对iOS编程有一个更好的理解.尽你最大的努力去学习,越多越好.

我们来看一个真实生活的案例

想象一个电视遥控器.它可以在远距离很方便的无线遥控电视的音量.切换电视频道,你仅仅需要按频道数字.增加电视音量,你只要按音量+按钮.

我来告诉你.你知道当你按下音量按钮或者频道按钮发生了什么吗?可能不知道.我相信我们大多数人不知道遥控器是怎样无线遥控电视机的.你可能会想到遥控器发送一个确定的信息给电视机然后触发音量增加或者切换频道.

在这里例子里,跟你互动的按钮通常被描述成接口,隐藏在按钮之后的内部细节归类为实施.接口通过一条信息与实施联系起来.

这个概念同样能在iOS编程世界里实现.storyboard里的界面是接口,代码则是安装启用.用户界面元素(如按钮)通过信息来与代码沟通.

具体的说,如果你回到Hello World项目,你在视图里添加的按钮就是界面.Viewcontroller类里面的showMessage()方法则是实施(implementation).当有人按下按钮,它发送一个showMessage的信息给ViewController来唤醒showMessage的方法.

我们刚才演示的是一个面向对象工程(OOP)中非常重要的概念,叫做封装.showMessage方法的实施隐藏在外部世界(如界面).Hello World按钮不知道showMessage()方法怎样工作.它所知道的是它需要发送信息.showMessage()方法通过在屏幕上演示一条"Hello World"信息处理其它的.

Quick note:和OC一样,Swift是一个面向对象工程(OOP)语言.大多数app中的代码用同样的方法处理一类对象.在这里我教你OOP概念不是想要把你吓跑.继续阅读.你会学习更多关于OOP的内容.

触摸的背后

现在你应该理解UI里的按钮是怎样和代码联系的,我们来看看当一个用户按下"Hello World"按钮实际上发生了什么?"Hello World"按钮是怎样调用执行showMessage方法的?

你记得你是怎么在界面编辑器中建立Hello World按钮和showMessage方法之间的联系的吗?再次打开Main.storyboard,选择"Hello World"按钮.点击多功能区的Connection inspector标志.在发送事件的部分,你应该可以找到一条可用的事件及其对应的方法调用.像你在下图看见的一样,Touch Up Inside事件联系着showMessage()方法.

在iOS,apps是基于事件驱动的编程.不管是系统对象还是UI对象,都听从于特定的事件来确定app的流程.一个UI对象(如按钮),它可能听从于一个特定的触摸事件.当触发事件时,这个对象唤醒预设的方法来和事件合作.

在Hello World app里,当用户抬起手指放在按钮上的时候,"Touch Up Inside"事件被触发.因此,它唤醒showMessage()方法来演示"Hello World"信息.由于我们想要避免意外或者错误的触摸,所以用"Touch Up Inside"事件代替"Touch Down".

showMessage方法里面

你现在应该对iOS编程有了更好的理解.但是showMessage方法里的代码块是什么呢?

先说重要的,方法是什么?像之前提到的,一个app里的大部分代码用一些方法处理一些类型的对象.每一个对象提供确定的功能和执行特定的任务(如在屏幕上演示一条信息).这些功能当用代码表达时,我们称之为方法.现在,让我们近距离的观看showMessage()方法.

Quick note:我知道理解这些代码对你来说有点难.如果你是编程纯小白,可能需要一段时间来理解OOP.别放弃,因为如果我们继续,你将对对象,类和方法获得一个更好的理解.你也可以看看附件来学习更多的Swift知识.或者参照Playgrounds章节里的小练习.

在Swift里,为了在一个类里声明一个方法,我们用func关键字.func关键字和方法是一个意思.这个名字可以识别方法同时让方法更容易被你代码里其他地方的唤醒.方法可以输入参数.参数用圆括号界定.在我们的例子里,方法不需要任何参数.在这种情况下,我们之间简单的写下一对空括号.在方法声明里有一个关键字我们还没探讨过叫做@IBAction.这个关键字允许你在界面编辑器中联系你的源代码到用户界面对象.当它插入方法声明中的时候,意味着这个方法可以暴露给用户编辑器.这就是为什么当你连接Hello World按钮和代码时会有个showMessage事件出现在pop-over里,如果你不知道我在说什么你可以再看一次下面的图

OK,方法的声明说的够多了.我们来说说花括号里封闭的代码块.

代码块是实际执行任务的方法.但是,在iOS里开发app的时候,我们不需要总是从头编写所有的功能.例如,你不需要学习如何在屏幕上画出警告框.你可以利用iOS SDK框架提供的类来担当重任.iOS SDK 带来的各种frameworks和kist会让你更轻松.例如,UIKit框架提供类来构建和管理你app的用户界面.

这里我们依靠UIAlertController来创建Hello World消息.一个UIAlertController对象显示一个警告信息给用户.第一行代码创建一个UIAlertController对象.从一个类构建一个对象的语法和调用一个方法很像.你指定类名,紧随其后的是一组属性的初始值.这里我们指定标题,消息和警报的风格:

let alertController = UIAlertController(title: "Hello World", message: "Hello World", prefeStyle: UIAlertControllerStyle.Alert)

创建UIAlertController类(如alertController)之后,我们调用addAction方法来增加一个动作给警报,它会显示"OK"按钮.在Swift工程里,你可以用.来呼出一个方法.

alertController.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.Default, handler: nil))

你可能想知道你怎么才能找到用法和一个类可用的方法.在Xcode里,你可以按住option键,点击类的名字(如UIAlertController).pop-over会出现来显示类的描述.你可以更多的信息通过检查类的参考文献.

UIAlertController对象配置好以后,最后一条代码是在屏幕上显示的警告信息.

self.presentViewController(alertController, animated: true, completion: nil)

在Swift,你可以用self属性来引用当前实例(或对象).

在大多数的情况下,self关键词是可选的.你可以简单的写下面的代码:

presentViewController(alertController, animated: true, completion: nil)

界面和代码的关系

Xcode是怎样知道界面编辑器里的ViewController与ViewController.swift里定义的ViewController类联系起来的呢?

整个事情看起来不重要但是事实上并不是如此.你还记得我们创建Xcode样板工程时选择的模板吗?我们选的是"Single View Application"模板.当用这个工程模板时,它会在界面编辑器里自动创建一个默认的view controller然后生成ViewController.swift.综上所述,view controller是自动和定义在swift文件里的ViewController类相连的.

我们来到storyboard,选择View Controller.在多功能区域里,选择Identity inspector图标,你会发现ViewController被设置成标准类.这就是界面编辑器里的对象是怎样与Swift代码类关联的.

屏幕背后的运行按钮

我想跟你们讨论的最后一件事是运行按钮.当你点击运行按钮时,Xcode自动登录模拟器然后运行你的app.屏幕后面发生了什么?作为一个开发者,你应该看看所有的部分.

整个进程可以被分解成三段:编译,打包和运行.

  • 编译 --你很可能认为iOS理解Swift代码.事实上,iOS仅仅只能阅读机器码.Swift代码是为开发者读写准备的.为了让iOS理解app的源代码,它不得不进行一个翻译进程来把Swift代码翻译成机器代码.这个过程被称为"编译".Xcode已经附带了一个内置编译器来编译源代码

  • 打包 --除了源代码,一个app通常包含源文件比如图像,文本文件,声音文件等等.所有这些资源都被打包在一起来生成最终的app.我们把这两个过程叫做"构建"过程.

  • 运行 --实际上的登录模拟器和读取你的app.

摘要

你现在应该对Hello World app工作有一个基本的认识.作为一个没有任何编程经验的初学者,要弄清楚我们之前讨论的所有编程概念并不容易.不要担心.当你写下更多代码然后在下一章开发一个真正的app滞后,你会对Swift和iOS编程有一个更清晰的认识.


你可能感兴趣的:(Swift的一些翻译3:Hello World App的解释)