屁屁痛了一整晚昨天全程跪著打文章,都這樣了你們該進來看一下了吧,順帶一提如果有對Swift其他主題或功能感興趣的話,可以在下面留言讓我知道,我會查資料並整理給大家,今天剛吃完早餐沒什麼要抱怨的..,那就直接開始吧。
上次我們聊完Closure的是什麼及如何縮寫它,這次我想聊Closure的其它用法。
很多事情感覺看似不甘你的事,但那些鳥事也會自己找上門來...,你一定沒辦法想像陣列處理跟Closure有關吧!!
我們知道陣列處理的方法有很多,像是map、filter、forEach、sort...一大堆(如果有興趣可以參考板上的巨巨寫的有關陣列處理的文章,真的寫很好),而今天我們來講陣列方法結合Closure的處理。
很多人在處理陣列時時常會看到他吧,以前我還經常跟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)"
let newArray2 = numArray.map({ (num)in return "new number \(num)"
let newArray2 = numArray.map({ (num) in "new number \(num)"
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是函式最後一個參數時則可以把它放到括號的後面。
let newArray2 = numArray.map(){ "new number \($0)" }
如果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"]