让不懂编程的人爱上iPhone开发(2020春iOS13+Swift5.1+Xcode11版)-10

欢迎继续回到我们的学习。


重新认识我们的应用


在结束这一小部分的学习之前,让我们来一起复习下已经学过的一些东西。

在之前的内容中,我们一起接触了“对象”这个概念,它是构建iOS应用的基础。

到目前为止,我们已经接触过的主要对象是ContentView,它代表了应用的主界面。

此外,我们也接触了state这个概念,它可以看做是应用当前现状的一个快照。到目前为止,应用存在两种可能的状态,由alertIsVisible这个变量的值决定。

1.“欢迎”状态

在这种状态下,用户将看到应用的主界面,以及一个欢迎信息。此时alertIsVisible的值为false。

2.”提示“状态

此时弹出式对话框会覆盖在主界面之上。此时alertIsVisible的值为true。

在SwiftUI中,应用的状态和其中的对象将相互影响。某个对象将在外部的刺激(可能是用户的交互,或是来自操作系统,另一个对象,状态的改变等等)下做出响应,从而进一步改变应用所处的状态。

同样的,更改应用的状态会影响对象,从而执行某些行为,或是更改某些数据,并最终影响到应用的状态。

在iOS中,应用是事件驱动的。也就是说这些对象会等待某些特定的事件发生,然后进行处理。或许你会觉得很奇怪,一个应用大多数的时间都在。。。无所事事。它只是端上一杯茶,坐在那里等待事情的发生。当玩家触碰屏幕的时候,应用会花上几个微妙的时间来处理这个事情。然后呢?然后当然是接着休息,直到下一个事件的到来。

而你作为一个程序猿扮演的角色是什么呢?是编写一些代码,当你的对象接收到事件发生的消息后对它们进行处理。

下面这个图显示了当前这个应用的交互工作原理。

在我们这款应用中,当用户触碰了界面上的按钮后,对应的按钮对象就会执行action:方法中的代码,也就是将alertIsVisible变量设置为true。而alertIsVisible是一个状态变量,所以它可以影响应用中的其它对象。

按钮对象还会调用alert()方法,它跟alertIsVisible是双向绑定的关系。这就意味着每当alertIsVisible变量的值改变时都会调用该方法。alert()方法还定义了一个Alert视图,但alertIsVisible变量为true时会显示。

而当提示对话框显示在界面上时,应用就会返回”休眠“状态:等待用户的下一次交互。

需要注意的是,alert方法属于modal类型的,这是UI交互中的一个术语,也就是说在用户跟它产生交互之前,没法跟应用中界面的其它部分产生任何互动。换句话说,它是个抢占式响应对象。

而此时用户唯一能做的交互就是触碰对话框上的按钮让其消失。

而当用户执行了这种操作后,alert和alertIsVisible之间的双向关联就会将alertIsVisible设置为false。

此时用户就会返回到主界面,而应用则继续等待下一次的用户交互。

你的整个应用都是由使用类似方式来相互交流的对象组成的。

当然,你可能之前在自己的网站开发中使用过PHP或者Ruby脚本。上面的这种事件驱动模型和PHP脚本的工作方式是不一样的。PHP代码会从头到尾顺次执行,直到抵达代码的尾部,然后退出。

而应用则不同,除非玩家强制关闭(或者自己崩溃了),它是不会主动退出的。一个应用会将自己的大部分宝贵时间消磨在静静的等待上,它们会等待输入事件的发生,然后如获至宝的去处理这些事件,完成后重新回家休息。

在移动设备上,玩家的输入通常是触摸事件,这一类事件是应用最重要的事件源,但除此之外还有其它类型的事件。比如操作系统会通知应用有来电,或者界面要重新绘制,或者计时器在不断的倒计时,等等。

不管是哪种类型的事件,你需要记住一点,应用所做的每一件事都是由某种事件来驱动的。

好了,本部分的学习就到此结束了。

从下一课开始,我们将继续学习如何创建应用的用户界面。

编辑于 05-30

文章被以下专栏收录