主题 : 从入门到精通:四个实例参透 iOS “快捷指令” (中)
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605031
威望: 529311 点
无痕币: 1 WHB
贡献值: 0 点
在线时间: 62204(时)
注册时间: 2008-12-25
最后登录: 2024-04-28

从入门到精通:四个实例参透 iOS “快捷指令” (中)

— 速览 —
• 本帖为"上、中、下"的中篇,请先阅读上篇(点击此处跳转[color=transparent])
• 在上一篇帖子中,我介绍了"快捷指令"的工作原理:把一系列操作编织在一起,以达到自动执行多个操作的目的;
• 每一步操作都有三要素:输入,具体过程,结果。紧扣这三要素,才不会让自己陷入混乱;
• 本帖将继续使用"实例二:洗衣计时器"下载链接】[color=transparent],让您体验 DIY 的乐趣。
废话不多说,正文开始


— 改良一:老化的洗衣机 —
假设我家的洗衣机因为老化的关系,"实际运行时间"会比设定的"洗涤时间"多 10 分钟,我该如何调整该指令呢?
▼ 大家应该都想得到:我只要给"洗涤时间"加上 10 分钟,再把新的数字作为"实际时间"与"当前时刻"相加,就能得到"实际结束时刻"了;

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

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

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

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

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

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

千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605031
威望: 529311 点
无痕币: 1 WHB
贡献值: 0 点
在线时间: 62204(时)
注册时间: 2008-12-25
最后登录: 2024-04-28

— 改良二:社畜的洗衣机 —
大家是不是觉得"加 10 分钟"实在是太简单了?请思考一个更复杂的例子:我是一只加班狗🐶,每天都有开不完的会,衣服只能在会议的间隙中洗。因此,我想制作一款指令,满足两个需求:
1.可以洗衣时给我一个提醒;
2.衣服洗好时给我一个提醒;
这该怎么办?其实思路很简单:
• 找到时间最长的会议间隙;
•(假设在会议结束后立刻去洗衣服,)可以洗衣的时刻 = 会议结束的时刻
• 衣服洗好的时刻 =会议结束的时刻 + 洗涤时间
• 分别在"可以洗衣的时刻"与"衣服洗好的时刻"创建一个提醒就行了

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

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

"所有日历":从哪一个日历查询日程信息,你可以把节假日、节气这种去掉;
• "3 个日程":获取多少个日程,太多没必要;
 "任一天":查询今天、明天或任一天的日程;
▼ 获取日程信息后,我得在三个日程中挑一个,以便在这个日程结束后洗衣服。怎么办?搜索"选取"即可;

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

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

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

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

▼ 如法炮制一个新的"添加新提醒事项"的操作,并将"提醒时间"设为日程的"结束日期",将"具体内容"设为"赶快洗衣服!" iPhone 就会在可以洗衣时通知我们了;
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605031
威望: 529311 点
无痕币: 1 WHB
贡献值: 0 点
在线时间: 62204(时)
注册时间: 2008-12-25
最后登录: 2024-04-28

— "内容图"引擎 —
我猜看到这里的读者,可能已经感到枯燥了。这实属正常,因为指令中的流程一多,操作间传递的变量就变得抽象了起来:一会儿是日程,一会儿是时刻,一会儿是纯数字有点混乱。
其实,苹果为了防止用户因为一堆变量而放弃使用"快捷指令",推出了一款名为"内容图"的引擎,内置在"快捷指令"中。这个引擎有什么用?请看下图:

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

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

▼ 在相册中保存的封面

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

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

一般来说,机器是无法理解"媒体"这种复杂变量的。如果用户不告诉机器"我具体需要什么",机器就会卡死。"内容图"引擎通过自动提取所需信息的方式,维持了"快捷指令"的正常运作。
以刚刚的会议日程为例,虽然我们指定了"结束时间",但结束时间究竟是如何表示的?2020年5月28日?28 / 5 / 2020?精确到小时、分钟还是秒?在 iOS 中,这些都不需要用户来思考,"内容图"引擎会把一切调整到可以运行的状态。
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605031
威望: 529311 点
无痕币: 1 WHB
贡献值: 0 点
在线时间: 62204(时)
注册时间: 2008-12-25
最后登录: 2024-04-28

— 中篇总结 —
本帖中,我使用了两个对"洗衣计时器"的改良,介绍了按照自己意愿修改现有指令的方法。总结下就是:
•明确自己的需求。首先抛开"快捷指令"思考,正常情况下我是如何满足自己需求的,然后把这个过程分割为一个个步骤,看看"快捷指令"中有没有对应的"操作";
• 多多翻阅"操作"库。想要制作一个实用的捷径,没有任何速成的方法,必须花时间去了解"快捷指令" App 中到底提供了哪些操作;
• 不要把事情想复杂。在"内容图"引擎的帮助下,用户不需要像编程一样,先定义某个变量,再调用这个变量;相反,你只要按照直觉把相关的操作放在一起就行了;
•人工判断与机器相结合。在"社畜的洗衣机"中,判断"时间最长的间隙"自然是可以用"快捷指令"实现的,但把判断过程交给用户也未尝不可,这让指令简洁了不少;

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

UID: 23
精华: 1
发帖: 261119
威望: 117132 点
无痕币: 2349 WHB
贡献值: 0 点
在线时间: 9390(时)
注册时间: 2007-11-24
最后登录: 2024-04-28

看看了解一下,谢谢总版分享!
事能知足心常乐 人到无求品自高
级别: 十方秋水

UID: 88
精华: 0
发帖: 130120
威望: 221902 点
无痕币: 107420 WHB
贡献值: 0 点
在线时间: 51973(时)
注册时间: 2008-03-18
最后登录: 2024-04-25

支持楼主,感谢分享。
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605031
威望: 529311 点
无痕币: 1 WHB
贡献值: 0 点
在线时间: 62204(时)
注册时间: 2008-12-25
最后登录: 2024-04-28

这个可以看看,了解一下。
Total 1.489999(s) query 4, Time now is:04-28 19:17, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛