21

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

 3 years ago
source link: https://zhuanlan.zhihu.com/p/141356731
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

让不懂编程的人爱上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代码会从头到尾顺次执行,直到抵达代码的尾部,然后退出。

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

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

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

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

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




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK