引言
初入大學(xué)的時(shí)候,會(huì)有許多社團(tuán)或者團(tuán)委學(xué)生會(huì)招新。抱著好奇心以及在大學(xué)期間努力變成“現(xiàn)充”的愿想 (已經(jīng)破滅),就報(bào)名了幾個(gè)組織。不久便收到了他們的面試通知短信??吹絹硇胖杏形业拿?,想到:他們肯定是用復(fù)制黏貼刪除編輯的蠢方法吧,自己以后一定不能這樣。自此便暗暗想到要用 Workflow 來做一個(gè)「半自動(dòng)化」「變量支持」短信群發(fā)器(為何稱之為「半」?因?yàn)榫拖駲C(jī)槍中的半自動(dòng)模式,自動(dòng)填寫短信文本,按一下 send 就發(fā)送一條,理論上支持無限變量個(gè)數(shù))吃雞吃多了呵呵呵...

這個(gè)構(gòu)想一直存在于我的腦海中,直到我看到我身邊的舍友真的如我想象一般,重復(fù)著:復(fù)制-粘貼-刪除-編寫-校對(duì)-發(fā)送,這么一個(gè)無聊而且效率極低的過程,我才決定將這個(gè)構(gòu)想轉(zhuǎn)化成成品。
我不會(huì)告訴你我是花了4周的大學(xué)計(jì)算機(jī)課才把v2做出來的...
短信群發(fā)v2演示視頻
如果無法觀看請(qǐng)Safari打開
構(gòu)想
最初(v1)的構(gòu)想是比較簡(jiǎn)單的,就是將wf做成兩個(gè)核心板塊,分別為模板板塊和數(shù)據(jù)板塊。這樣分的原因有三:
- 可以將「復(fù)制-粘貼-刪除」步驟省去
- 可以將「編寫-校對(duì)」步驟統(tǒng)一時(shí)間進(jìn)行
- 可以將數(shù)據(jù)編輯過程從移動(dòng)端中解放出來,你只需將編輯好的板塊復(fù)制粘貼到wf的文本框中
v1版本的實(shí)現(xiàn)只用了一節(jié)大機(jī)課,這使我心生膨脹。但在后來重新審視的過程中,發(fā)現(xiàn)了這個(gè)wf的一些缺點(diǎn),這讓我萌生出制作v2的念頭。
缺點(diǎn):
- 短信文本中只有一個(gè)變量「姓名」
- wf中拆分?jǐn)?shù)據(jù)的動(dòng)作運(yùn)用有點(diǎn)變扭,不夠優(yōu)雅
因?yàn)槭趾?jiǎn)單,本文就不對(duì)v1作解析了,只放出wf鏈接:短信群發(fā)v1
后來v2是針對(duì)v1中的缺點(diǎn)進(jìn)行改進(jìn)。
先給出v2的wf圖片和鏈接以便在閱讀的過程中參考:
圖片、v2鏈接
2017-12-2更新:關(guān)于提高「數(shù)據(jù)模板」輸入效率的補(bǔ)充
v2解析
這里我會(huì)將整個(gè)wf分解成一個(gè)個(gè)實(shí)現(xiàn)片段進(jìn)行解析。
wf中出現(xiàn)個(gè)別英文變量的說明:
模板文本=text
數(shù)據(jù)板塊=all
替換的文本=rplword
模板中被替換的變量符號(hào)=value
編輯完成的短信文本=t
1. 數(shù)據(jù)的分割
對(duì)「數(shù)據(jù)的分割」進(jìn)行解析時(shí),首先我們需要看一下數(shù)據(jù)是怎么樣排列的,這里數(shù)據(jù)儲(chǔ)存的格式為:
電話號(hào)碼(11位),變量1,變量2,變量3...
電話號(hào)碼*(11位),變量1*,變量2*,變量3*...
...
因此需要進(jìn)行兩個(gè)不同的分割,分別是:通過「行」分割、通過「半角逗號(hào)」分割。我們首先通過「行」分割,來獲取單條信息的數(shù)據(jù),然后通過「半角逗號(hào)」分割,來獲取單條信息數(shù)據(jù)中的元素(電話號(hào)碼以及各個(gè)變量變量)
注:當(dāng)「all」經(jīng)過「Split Text」動(dòng)作后就會(huì)被分成一塊一塊,而「Repeat with Each」就會(huì)分別對(duì)每一塊按順序執(zhí)行其內(nèi)包含的動(dòng)作。

2. 元素的區(qū)別和分類
為了將wf的判斷過程簡(jiǎn)化,我將電話號(hào)碼放在第一位,并且限定它為11位的數(shù)字。所以對(duì)傳遞下來的每個(gè)元素進(jìn)行「If」判斷,如果是11位的數(shù)字則設(shè)為「電話」變量;否則就是普通變量,通過「Add to Variable」將其添加到「x」中。在最后對(duì)單條信息處理完時(shí),我們需要將「x」設(shè)置為「Nothing」,讓它清空來接受新的數(shù)據(jù)。(圖中沒有表現(xiàn))
注:「Add to Variable」并不是將傳遞給它的數(shù)據(jù)簡(jiǎn)單地「糅合」在一起,而是「分隔開」且「有序」地儲(chǔ)存在「變量」中,可以將其理解為編程中的「List」數(shù)據(jù)類型。這個(gè)特性為后來的變量處理簡(jiǎn)化了很多。
其實(shí)這里是可以做得更優(yōu)雅,即將第一位元素直接設(shè)置為電話變量,這樣就可以不用對(duì)電話號(hào)碼的格式進(jìn)行限定(有些電話號(hào)碼格式不是11位或電話號(hào)碼中帶有連字符或國(guó)家代碼)。只不過我懶,因此就不作改動(dòng)了。
3. 文本變量的有序替換
獲取「x」對(duì)其下接「Repeat」,實(shí)現(xiàn)文本變量的有序替換。因?yàn)樽兞慷际前凑枕樞騺淼?,即?/p>
「%n」→「變量n」
所以「n」的「有序遞增」就成為這個(gè)部分的關(guān)鍵(圖中體現(xiàn)為「s」)

我們知道在「Set Variable」中的變量名稱是不能插入另外一個(gè)變量的,這就需要新建一個(gè)Text框,在框內(nèi)寫入能夠遞增的「s」來曲線救國(guó),每一次執(zhí)行「Repeat」,「s」就會(huì) +1s ,藉此實(shí)現(xiàn)「%n」的遞增。與上一部分的「x」同理,在進(jìn)行新的「Repeat」之前都需要對(duì)「s」進(jìn)行還原,即重新設(shè)置為 1 。
這里運(yùn)用「If」和兩個(gè)「Replace Text」是為了避免文本替換對(duì)短信模板的污染?!窻eplace Text」的用法不贅述,看仔細(xì)看wf流程就會(huì)理解。
因?yàn)檫@個(gè)部分的圖太長(zhǎng),所以請(qǐng)點(diǎn)擊鏈接觀看:文本變量的有序替換
最后
本wf是憑借著我對(duì)它淺薄的理解做出來的,過程說實(shí)話還是有點(diǎn)辛苦的,但如果能起到拋磚引玉的效果,我也是會(huì)十分地開心。Workflow是個(gè)萬能工具箱,而你就就是一個(gè)木匠,請(qǐng)不要吝嗇自己的腦洞以及智慧,拿上稱手的工具,創(chuàng)造出屬于自己的杰作吧。