IOS Swift 还能更精简? Closure的其它用法你一定要知道!!

前言:

屁屁痛了一整晚昨天全程跪着打文章,都这样了你们该进来看一下了吧,顺带一提如果有对Swift其他主题或功能感兴趣的话,可以在下面留言让我知道,我会查资料并整理给大家,今天刚吃完早餐没什麽要抱怨的..,那就直接开始吧。
https://ithelp.ithome.com.tw/upload/images/20210423/20136753dDzHXBLfZM.jpg


上次

上次我们聊完Closure的是什麽及如何缩写它,这次我想聊Closure的其它用法。

乾我屁事啊

很多事情感觉看似不甘你的事,但那些鸟事也会自己找上门来...,你一定没办法想像阵列处理跟Closure有关吧!!
我们知道阵列处理的方法有很多,像是map、filter、forEach、sort...一大堆(如果有兴趣可以参考板上的巨巨写的有关阵列处理的文章,真的写很好),而今天我们来讲阵列方法结合Closure的处理。

map地图先生你好

很多人在处理阵列时时常会看到他吧,以前我还经常跟forEach搞混呢!简而描述他们的差别就是,map在阵列处理结束後会存到新的阵列,而forEach不会。还记得以前在写JS时使用map都会搭配箭头函式做使用。而今天的Swift我们就要搭配Closure做使用,诶~你会发现他们两个都是匿名函式喔酷吧。

开始罗

我们先建立一个阵列

let numArray = [1,3,5,7,9]

接下来我们要使用map来达到让每个数都+1,并他放入新的阵列

numArray.map({
   (num:Int)->Int in
   return num+1
})

我们知道透过map我们可以将Array每个成员拿出来处理,而参数num就会依序收到每个成员再执行後面的动作,最後他会回传一个新的阵列,我们把它放入newArray的变数中

let newArray = numArray.map({
   (num:Int)->Int in
   return num+1
})

print(newArray)
// [2,4,6,8,10]

很简单对吧~~

哪泥~还可以简写!!

我们先根据上篇文章的内容进行简写,我们在重新建立一个新的阵列

let newArray2 = numArray.map({
   (num:Int)->String in
   return "new number \(num)"

开始简写
  1. 若已经知道参数及回传值的型别的话,则可以删除closure内参数及回传值的型别
    • 根据上面的资讯我们知道了每次传入都是整数而会传的而也是字串。
    let newArray2 = numArray.map({
       (num)in
       return "new number \(num)"
    
  2. 若程序码只有一行的情况下可以省略return,因为此时系统会帮你预设return
    • 很明显的他只有一行
    let newArray2 = numArray.map({
     (num) in "new number \(num)"
    
  3. 可以利用$0、$1、$2..,代替进去的参数名称
let newArray2 = numArray.map({
  "new number \($0)"
})
print(newArray2)
//["new number 1","new number 3","new number 5","new number 7","new number 9"] 

还嫌太多~还能在简写吗?

没错是可以的,接下来我们要再介绍两个简写的条件及方法。

  1. 如果Closure是函式最後一个参数时则可以把它放到括号的後面。

    • 我们很明显的可以观察到在map里面的函式是以Closure当作最後一个参数,所以我们可以将它放到括号的後面。
    let newArray2 = numArray.map(){  "new number \($0)" }
    
  2. 如果Closure是函式唯一的参数时则可以把小括号拿掉

    • 如果Closure是函式唯一的参数除上述做法也把小括号拿掉
    let newArray2 = numArray.map{  "new number \($0)" }
    
    print(newArray2)
    // ["new number 1","new number 3","new number 5","new number 7","new number 9"] 
    

Closure还有许多用途,目前Closure部分先整理到这篇,下次见罗~~


<<:  【课程推荐】2021/5/8~5/9 Angular前端开发框架入门班

>>:  AutoML应用分享║DataRobot 年度线上大会 2021

day 28 - 请问, 有流程图可以看吗?

『请问, 有流程图可以看吗?』每次我看别人的系统时, 都会想这样问 身为一个需要透过视觉来辅助理解的...

[DAY 30] 复刻 Rails - View 威力加强版 - 2

终於到最後一天了,那就不罗嗦直接进入正题吧! 关於 rendering.rb 之前我们的做法是把 r...

Backtrader - 自订 datafeeds

我们之前在喂历史资料,都是先用 shioaji 下载下来,然後再用 padas 转成 datafra...

第 9 集:RWD 响应式

此篇会着重在 Bootstrap 5 响应式的介绍以及使用方法。 RWD 响应式网页设计 (Res...

Day 2:AWS是什麽?30天从动漫/影视作品看AWS服务应用 -《Vivy -Fluorite Eye's Song》Part 2

续角色介绍,但也是快要没梗,只能说真正有趣的会是几个Vivy经历过的事件扭转,如果透过AWS相关服务...