自定义活动,用来创建新的组件、服务、函数或者其他代码模块,使用最多的是创建函数。
函数是对一个功能的封装,在调用的时候执行,没有调用的时候则不执行。函数可能有参数,可能没有参数,如果有参数,则是形式参数,主要用于占位置。在调用时,如果函数有形式参数,则需要传递实际参数,即传参。
在viple中,把活动拖到Main中,即为调用。
自定义活动中,可以没有形式参数,也可以有一个形式参数,也可以有多个形式参数。
拖一个自定义活动到Main中,右键选择Rename进行重命名,命名要根据封装的功能来进行命名,达到见名之意的目的。
在自定义活动print上双击,进入print自定义活动中,找到Modify Inputs右侧的黄色按钮,点击该按钮可创建形式参数。
进入print自定义活动后,不创建形式参数。直接编写逻辑即可
Main中拖入一个数据,并将值写为2。将数据传入到自定义活动print中,弹出数据连接,左边的Value对应的是实际参数,右边的Taget对应的是形式参数,由于没有参数传递,所以,实际参数和形式参数都是空白,点击确定即可
效果:
该程序等价于以下程序:
上面的程序,不过是把行打印封装到了自定义活动print中而已。其他的地方需要打印的时候,可以复用自定义活动print,实现了对打印功能的封装。
上一个案例中,没有进行传参,所以,程序可以直接改为为不带有自定义活动的形式。
假设有一个需求,有的人要打印数字1、有的人要打印数字2、还有的人要打印数字3
还有可能:有的人打印1颗星(*),有的人打印2颗星(**),有的人打印3颗星(***)
不使用自定义活动,则程序如下:
但是,如果我们要打印是100嘞,10000颗星嘞,使用拷贝复制的方法,肯定能做,但程序就比较庞大了,且需要大量的时间。此时,我们需要使用循环和自定义活动来解决该问题。
首先创建一个自定义活动,用于打印数字N,当传入的是1,则打印1,;传入的是2,则打印2,闯入的是3,则打印3,传入的是n,则打印n。现在不知道具体打印数字几,所以,设置一个形式参数占位置。
编写打印n的逻辑
需要注意的是,由于该自定义活动会用到多次,且后期打算放在循环中,所以,打印后,需要将输出连接到右侧的三角形位置(三角形表示输出值,Outgoing value;圆圈表示通知,即notifications,在自定义事件中会用到)
注意:形式参数的引用方法为:instance.形式参数名称。
Main中编写循环,获取到数字1、2、3,并分别将这三个数传入printN中即可,所以,首先需要使用循环打印出数字1、2、3
接下来,把图中的
修改为自定义活动,也就是
根据Target中的形式参数n去找对应的实际参数number,并填写上,实现参数传递
整体程序以及测试结果如下:
假设需要计算两个数相加,此时,不知道具体是哪两个数相加,所以,需要设置两个形式参数占位置,整体的自定义活动就是做加法功能,综上,自定义活动的名称可以设置为add,形式参数有两个,可以分别设置为a和b。注意:形式参数a和b的类型是整型,后面传递参数的时候,实际参数的类型也必须为整型。
编写两个数相加的逻辑
接下来进入Main中,编写实际参数
传递参数:将与并活动的输出连接到自定义活动add的输入,弹出数据连接窗口,此时,根据Target中的形式参数去找对应的实际参数,a表示的第一个加数,对应的实际参数是first,所以,将first写在Value侧的第一个位置,表示的含义是:占位的形参a,对应的实际参数是first,因为first的值是100,所以a的值就是100了,。同样的道理,b对应的是second,其值为200。
将计算结果打印并测试
如果将数据活动中的两个值分别改为300,400,则计算结果为700。
事件分为两种类型,内建事件和自定义事件,在之前的博客中已经写了内建事件(按键事件和释键事件)
自定义事件:系统没有封装好的事件,需要用户自行定义如何触发。
简单的自定义事件案例:
首先创建自定义活动,内容为数据活动,并将值写为2,将输出连接到圆形(触发事件,并且能将值一并返回)
程序分析:数据活动连接到圆形,可以触发事件,并且输出值2,触发到自定义事件后,将数据2进行了打印。
稍微复杂的自定义事件案例:
案例:当计数器数到8的时候,触发自定义事件,并执行后续程序。
由于需要传递一个参数进来,故在自定义活动test中设置一个形式参数,来接收外部的数据8。
Main中:
测试