Tutorial - Workflow 数据保存 (多图!)
很多时候,我们使用 Workflow 都不单纯只是对现有的内容进行处理,像查询快递单号这样的流程,还需要保存数据。针对查询快递单号这样的流程,很多人选择使用「Add New Event」或「Add New Reminder」的相关动作实现数据增删读写,但是这显然有一个弊端:杂乱的信息将汇入到我的 Reminder,影响 Reminder 的正常使用(强迫症);且对于复杂的、冗长的数据,这显然不是一个好方法。今天,将会教大家如何让你的流程像「应用」一样,优雅地保存数据。
媒介:iCloud Drive
有些人认为 iCloud 在我国像针管喷水一样缓慢影响体验,这没有错,也不完全正确。当你使用类似上传备份、上传照片这样的服务,自然会很慢;但是对于纯文本的读取和存储,其实完全不会感受到任何迟钝。这是因为在 iCloud Drive 的内容都有缓存,即便是上传,几个 KB 大小的文件也不会感觉任何不适。你可以亲自感受一下 Workflow 读取和存储文件到 iCloud Drive 的效果如何。所以今天的主题将会围绕 iCloud Drive 展开,Dropbox 等不展开讨论(尽管他们也是同样的原理)。
工具:JSON
JSON 广泛应用在轻量的程序数据交换中,调用各种 API 获得的同样是 JSON 格式数据(一般而言),其有着分级明显、数据简洁、兼容性强等诸多优点。毫无疑问 Workflow 内含 JSON 系列的处理动作。这里简单介绍将要使用的两个主要 Action:
- Get Dictionary Value:根据所要获取的数据所在层的 Key 将数据逐层拆开,递归的过程可以简单的理解为所要获取的数据的「地址」;
- Set Dictionary Value:与前相反,如果把上面的 Action 形容为「拆解」的话,此 Action 则是用于封装数据。
这里仅作必要的说明,具体的使用方法各位多多尝试,很多相关的文章(如Jailbreakhum)都有提及,请自行学习。接下来将分条说明日常用数据处理的三大操作:新增、删减和修改。
新增
假设我们有这么一组数据(两条,每条四个属性)。我们可以用这样的方式生成 JSON 格式数据。特别要注意红色框的部分。当然这里我偷懒了所有数据都是直接输入的。实际使用中,我们通常是把从某些途径获得的数据(如从 App Store Action 查询到的版本信息)循环生成,仅需注意层级 Key 的结构就可以了。通常一组内容的多个属性我们就是按照图示绿色框的方法生成,再把多组内容添加到一个变量,按照橙色框的方法生成。最后得到形如以下的结果。
删减
删减的处理方法是最简单的。假设我们获取了一组数据,数据内容和上面一样,表示为在实际使用中已保存的数据。我们获得到数据以后,一些整组的条目需要删除,即可按照图示方法处理。这里假设我们进行某些处理后需要删除「Drafts」这组数据,我们仅需按照绿色框的思想把想要保留的数据汇集到一个变量里,再按照橙色框的方法重新生成即可。最后得到形如以下的结果。对于简单结构的数据,使用「Get Items from List」,设置范围以作溢出处理相当方便(后面将会提及)。
修改
这部分处理如果按照上面的操作思想把所有内容拆开再重组,就太浪费资源了,JSON 本身也是不具有修改性质的。这里我们借用「Replace Text」可以很轻易地修改一组数据里的某些属性。如果你对正则不熟悉也不要紧,这里使用的表达式很浅显,而且格式都一致,只要修改 Key 的内容即可(见红色框)。这里假设我进行某些处理后需要得知 Drafts 更新了版本,便可按照绿色框的方法以 Drafts 的整组内容为单位修改对应属性,再按照橙色框的方法重新生成 JSON。最后得到形如以下的结果。(可对照上面的输出来观察)
小憩:思想整理
看到这里,或许你的头脑已经一片混乱了。这没有关系,万事开头难,慢慢实践下去,你将会有很大的收获。建议分功能进行尝试,给自己设置一些数据,去模拟这部分的操作。总结一下处理的过程:
- 对于删减和修改操作,我们的思想是把大层拆开(如上例的「list」),以一组数据带有若干属性的形式去全局处理数据内容,最后再把每一组数据以变量作为输入重新生成 JSON;
- 对于新增操作,我们只需按部就班地先把一组数据的各个属性封装,再把每一组数据以变量作为输入生成 JSON。
读取和存储
至此,由于图片所占的篇幅太大,这里不继续也不需要贴图。关于存储到 iCloud Drive 和从 iCloud Drive 读取的问题,仅涉及「Save File」和「Get File」两个 Action,只需要按需修改文件路径即可。
更常用的数据格式实例
上面原理性的操作似乎搞得晕头转向,我们以更加常用的数据格式实例来说明和体验这样的数据保存方式有什么优势。这是一个保存剪切板的流程(红色框为已保存数据),它需要的操作是满三组数据即溢出,以保证得到上图所示的效果。因此,我们并不需要考虑如何去修改数据,自然也不需要给数据过多的属性,甚至应该说,我们是以数据本身来存储,并不需要对其设置属性。
- 把新数据推入变量中,如绿色框所示;
- 对已保存的数据进行提取,判断个数,如果超过想要的个数,按照图中橙色框的方法保留靠前的几组数据即可;
- 重新封装数据并保存。
可以明显地感受到这样处理的便捷性,我们不需要关心数据的内容是什么,也不需要繁琐的正则匹配再调整格式、空行等操作;而且在溢出处理时橙色框中「Get Items from List」按照「Items in Range」筛选十分便捷。
说明
- 使用 JSON 处理而不是直接使用正则匹配来保存数据是因为实现的方法简单,不需要太多正则的知识。虽然步骤看起来似乎略显繁琐,但是对于简单结构的数据使用起来是相当便捷的。过去,本人也是使用正则匹配的方法来保存数据,但是对于格式的处理吃力不讨好,本文讨论的方法是我目前掌握比较便捷的方法。
- 如果你有保存数据需求的话,希望你能够坚持读完本文章。其实处理的方法很简便,但是受限于本人的文笔,事情似乎变得十分的繁琐。本方法依我个人使用习惯而言比较适合大家掌握,如果有这方面的需求,不妨尝试一下。如果还有更好的方案,希望大家可以不吝分享一下让我学习学习。当然了,这些内容都比较浅显,老手都应该比较熟练地掌握这些方法,如有什么不当之处,还望多多指点。
如有问题,欢迎留言或邮件咨询