iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

Swift - 來吧!鐵人三十項系列 第 27

Day27:當天的鐵人當天寫 - Higher-Order Functions & Closure(3)

前前言

嗨,大家好,我是 Lacie,您現在收看的是 Swift - 來吧!鐵人三十項 系列的第二七篇
在鐵人賽完結後,為保持持續做筆記的習慣
將會在我的 Medium 繼續撰寫文章,若有興趣者可前往觀看。


Closure & Map

針對陣列裡每一個元素做處理,處理後回傳至一個新的陣列

雖然 For-In 也可以做到一樣的事,但使用 Map 搭配 Closure 可以更快達到需求
例如將所有商品價格都打 5 折:

可能在國外用餐,都必須加上一成服務費:

像上集篩選出小於 25 歲的人後,可以使用 map 來僅印出名字:


Closure & Reduce

試著將 1 到 10 的陣列數字使用 reduce 加總:

也可以像這樣簡化:

reduce 也可以作用在字典,假設買三種麵包,每種麵包買的數量和價格都不同,可以先計算每種麵包乘出來總共是多少錢,再將它們加總:


Closure & CompactMap

假設有一個陣列是用來存取年齡的,但有時你沒辦法預期使用者會用哪種方式來輸入奇奇怪怪的東西,若只想得到「正確的年齡」,可以使用 compactMap 來處理:


Closure & FlatMap

flatMap 可以將陣列中的 nil 移除掉(但若返回的值為 Optional,則系統建議使用 compactMap):

flatMap 也可以將多維陣列化為一維陣列:


後記

以上介紹這些高階函式主要就是用來快速達到自己的需求、簡化複雜的寫法,由於僅初步認識可能有哪些用法,未深入研究,待之後碰到實際的案例後再來補充。


上一篇
Day26:當天的鐵人當天寫 - Higher-Order Functions & Closure(2)
下一篇
Day28:警告!- UIAlert
系列文
Swift - 來吧!鐵人三十項30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
陳董粉絲
iT邦新手 5 級 ‧ 2019-10-17 14:50:04

在Swift 4.1 之前flatMap有濾掉nil跟降維的功用 但為了更精準使用才把濾掉nil拆出來變compactMap 但為了怕之前使用者出問題所以flatMap濾掉nil的功能"暫時"先保留

我要留言

立即登入留言