说明:#原创# 标签为IT之家在IT圈所设的投稿栏目,具体投稿规则点此查看

— 速览 —

• 本帖为"上、中、下"的中篇,请先阅读上篇(点击此处跳转

• 在上一篇帖子中,我介绍了"快捷指令"的工作原理:把一系列操作编织在一起,以达到自动执行多个操作的目的;

• 每一步操作都有三要素:输入,具体过程,结果。紧扣这三要素,才不会让自己陷入混乱;

• 本帖将继续使用"实例二:洗衣计时器"下载链接,让您体验 DIY 的乐趣。

废话不多说,正文开始


— 改良一:老化的洗衣机 —

假设我家的洗衣机因为老化的关系,"实际运行时间"会比设定的"洗涤时间"多 10 分钟,我该如何调整该指令呢?

▼ 大家应该都想得到:我只要给"洗涤时间"加上 10 分钟,再把新的数字作为"实际时间"与"当前时刻"相加,就能得到"实际结束时刻"了;

▼ 我们在"快捷指令"的底部搜索框中输入"计算",发现 iPhone 支持加减乘除的操作;

▼ 轻点插入"计算",并将该操作拖动到"洗涤时间"下方,此时被加数会自动变成上一个操作的结果(即"洗涤时间");把加数改成 10;

▼ 别忘了把第 3 步中的参数改成"计算结果",试试"魔法变量"

至此,我们就获得一个老化洗衣机的计时器了。若想验证下你的指令是否可用,请点击底栏的"运行"按钮

此时指令会试运行,正在进行的步骤会变成绿色并转圈圈。如果指令遇到问题,你可以轻松发现出错的地方。

如果想要一步一步的 Debug,可以搜索并插入"退出快捷指令"这一操作。你可以把这个操作当成休止符,指令会在遇到它时停止运行。把它放在不同位置,你就能一步步检验流程中的问题了。

— 改良二:社畜的洗衣机 —

大家是不是觉得"加 10 分钟"实在是太简单了?请思考一个更复杂的例子:我是一只加班狗🐶,每天都有开不完的会,衣服只能在会议的间隙中洗。因此,我想制作一款指令,满足两个需求:

1.可以洗衣时给我一个提醒;

2.衣服洗好时给我一个提醒;

这该怎么办?其实思路很简单:

• 找到时间最长的会议间隙;

•(假设在会议结束后立刻去洗衣服,)可以洗衣的时刻 = 会议结束的时刻

• 衣服洗好的时刻 =会议结束的时刻 + 洗涤时间

• 分别在"可以洗衣的时刻"与"衣服洗好的时刻"创建一个提醒就行了

▼ 首先,我肯定要让 iPhone 知道我的日程安排。在底部搜索栏输入"日历",发现一个名为"获取临近日程"的操作;

▼ 遇到陌生的"操作"不要害怕,微笑着面对它,尝试编辑各个参数,你就能理解其中的含义;

"所有日历":从哪一个日历查询日程信息,你可以把节假日、节气这种去掉;

• "3 个日程":获取多少个日程,太多没必要;

 "任一天":查询今天、明天或任一天的日程;

▼ 获取日程信息后,我得在三个日程中挑一个,以便在这个日程结束后洗衣服。怎么办?搜索"选取"即可;

▼ 指令运行时,该操作会把输入的内容以列表的形式呈现,并让用户选择一个,如下图所示。记住!遇到不熟悉的操作,动手试一试是最好的办法!

▼ 显然,"周四例行会议"与"临时会议"的间隔时间最长,是洗衣服的好时机。在指令执行时,我会选择"周四例行会议"作为这一步操作的"结果";在编辑指令时,使用"魔法变量",将"选取"这一操作的结果作为下一个操作的输入;

▼ 此时会跳出一个菜单,让你选择日程中的具体信息。显然,我是要在会议结束后再去洗衣服,所以选择"结束日期"

▼ 至此,我们已经满足了第一个需求,(假设我在会议结束时立刻去洗衣服,)iPhone 会在洗衣结束时通知我们;

▼ 如法炮制一个新的"添加新提醒事项"的操作,并将"提醒时间"设为日程的"结束日期",将"具体内容"设为"赶快洗衣服!" iPhone 就会在可以洗衣时通知我们了;


— "内容图"引擎 —

我猜看到这里的读者,可能已经感到枯燥了。这实属正常,因为指令中的流程一多,操作间传递的变量就变得抽象了起来:一会儿是日程,一会儿是时刻,一会儿是纯数字有点混乱。

其实,苹果为了防止用户因为一堆变量而放弃使用"快捷指令",推出了一款名为"内容图"的引擎,内置在"快捷指令"中。这个引擎有什么用?请看下图:

乍看之下,这个指令难以理解:当前播放的歌曲是"音频",而相册里储存的是"图片"歌曲怎么可能保存到相册里?

运行该指令后,我们发现,保存下来的并不是"音频",而是"歌曲的封面"!

▼ 正在播放的歌曲

▼ 在相册中保存的封面

这就是"内容图"引擎的强大之处:当输入的内容与要求的类型不符时,"内容图"会自动将该内容转化为合适的类型。下面是"内容图"可视化后的亚子(是动图,需要加载时间🙏):

可以看到,以" iTunes 媒体"为核心发散出了一系列节点,每个节点中都存储了一些信息。这很好理解,一首歌不仅有音频信息,还有歌词、歌名、歌手、专辑等一系列附加信息。点击某个节点,我们就能看到这个节点具体包含了哪些信息(是动图,需要加载时间🙏)

一般来说,机器是无法理解"媒体"这种复杂变量的。如果用户不告诉机器"我具体需要什么",机器就会卡死。"内容图"引擎通过自动提取所需信息的方式,维持了"快捷指令"的正常运作。

以刚刚的会议日程为例,虽然我们指定了"结束时间",但结束时间究竟是如何表示的?2020年5月28日?28 / 5 / 2020?精确到小时、分钟还是秒?在 iOS 中,这些都不需要用户来思考,"内容图"引擎会把一切调整到可以运行的状态。


— 中篇总结 —

本帖中,我使用了两个对"洗衣计时器"的改良,介绍了按照自己意愿修改现有指令的方法。总结下就是:

明确自己的需求。首先抛开"快捷指令"思考,正常情况下我是如何满足自己需求的,然后把这个过程分割为一个个步骤,看看"快捷指令"中有没有对应的"操作";

• 多多翻阅"操作"库。想要制作一个实用的捷径,没有任何速成的方法,必须花时间去了解"快捷指令" App 中到底提供了哪些操作;

• 不要把事情想复杂。在"内容图"引擎的帮助下,用户不需要像编程一样,先定义某个变量,再调用这个变量;相反,你只要按照直觉把相关的操作放在一起就行了;

人工判断与机器相结合。在"社畜的洗衣机"中,判断"时间最长的间隙"自然是可以用"快捷指令"实现的,但把判断过程交给用户也未尝不可,这让指令简洁了不少;


中篇的内容到此结束,希望各位有一个良好的阅读体验。下篇中,我会带领大家制作实用工具:纯本地的"图片九宫格分割",以及利用百度 API 的 "OCR 文字识别"(点此跳转。如果文中出现错误,还请大佬们批评指正,在此谢过了~🙏