又到了发文的时间了,最近我的屁股一直长疔子真的好痛,有人知道要怎麽治标吗,一直跪着打程序也不是办法吧...,希望有经验的朋友能够给我建议。哭啊~~
当学会如何写func又突然看到名为Closure的东西时真得会一个头两个大,而且他们看起来也超像,真的不能只学一个吗?答案当然是可以阿,只要你不要写Closure就不要学^^,好拉还是要学一下毕尽在开发上它的用武之地真的还蛮多地方的,那我们就赶快开始吧。
首先让我们复习一般函式的写法
func addition(num1:float ,num2:float)-> Float {
return num1 + num2
}
addition( num1:3 , num2:5 )
// 8
这是一个加法的函式,若不了解的话记得先去看函式怎麽写,BTW和JS相较之下真的有点差异。
目前我们先把它想成没有名字的函式。在JS的话匿名函式最常使用的函式是箭头函式吧...。
我们先了解一般函式改成Closure的几个步骤
1.将函式名及函式名称删除
2.若有参数则把他放入大括号内
3.把参数放入大括号内後加入in
范例
let addtion = { (num1:Float, num2:Float) -> Float in return num1 + num2 } addtion(2, 5) // 7
此时你会发现func及closure的第一个不同:在呼叫closure时没有参数名
答案是有的!
那是什麽?我们还是利用上面的例子,我们已经将Closure放进变数addtion里面了,并且透过addtion来呼叫。
而我们也可以加上addtion的型别
let addtion:(Float,Float)->Float = { (num1:Float, num2:Float) -> Float in return num1 + num2 } addtion(2, 5) //7
此型别为接受两个浮点数为参数之後回传一个浮点数值
其实阿,不用把closure看的这麽复杂,其实他就是一个值而已,就像 x = 3 一样是一个值而已。
没错就是如此closure可以当参数和回传值,因为刚刚才说到closure就是一个值而已所以有何不可呢。
现在我们来示范如何把closure当作参数吧。
func calculate(num1:Float,num2:Float, operation:(Float,Float)->Float){
print(operation(num1,num2))
}
calculate(num1: 2, num2: 5, operation: addtion)
// 7
此作法为先建立一个名为calculate的函式,此函式必须有三个参数,其中名为operation的参数,需传入接受两个浮点数并回传一个浮点数的型别,诶~~有没有很熟悉啊,跟我们一开始建立的addtion很像呦,没错不要怀疑就放进去吧,就跟你平常一样放进去吧^^,在呼叫calculate的时候就可以像上面那样。
closure当然也可以当作回传值。
func MutiplyClosure()->(Float,Float)->Float{
return addtion
}
let doMutiply = MutiplyClosure()
doMutiply(3,5)
// 8
其实满好理解的对吧!!
下次我来整理如何简写你的Closure让他看起来更加简洁,好拉我要去睡觉了掰掰。
<<: [Day 36] 自我介绍後台及前台(五) - 前台的自我介绍页
>>: WordPress网站加速历程-SiteGround与CLOUDWAYS的TTFB比较
前言 在昨日取得的资料仅有当天的资讯,政府有提供下载近三年的资料,更多就需要申请,不过我们这三年已经...
建立一个结构 使用方式如下 struct 结构名称{ 结构变数; }; 例如: 宣告时 struct...
if else 与 else if 参考 Day06 - 变数(03) - BMI、Day11 - ...
前言 前一天我们有稍微提到安全性演算法的其中一个,也就是今天的主题「共同金钥密码系统」(shared...