Swift 3 數(shù)組map方法示例解析

map 函數(shù)的原型如下:

func map<U>(transform: (T) -> U) -> [U]

我們可以看到該函數(shù)使用了泛型欲侮。 (T) -> U 是一個泛型閉包宵距,它的意思就是類型 T 將會在閉包中進行邏輯處理,然后返回 U 類型愁溜。最后 map 函數(shù)會返回一個 U 類型的數(shù)組

通俗地講:

數(shù)組的 map 方法 它的參數(shù)就是一個閉包,它會將數(shù)組里的每一個元素放在閉包中進行處理,然后返回一個新的數(shù)組郭蕉,甚至是與原數(shù)組不同元素類型的新數(shù)組

示例

func greetPeople(person: String) -> String
{
    return "Hello, \(person)!"
}

let guestList = ["Chris", "Jill", "Tim"]
let fullGreetings = guestList.map(greetPeople)
print(fullGreetings) // ["Hello, Chris!", "Hello, Jill!", "Hello, Tim!"]

數(shù)組的 map 方法 它的參數(shù)是一個閉包,為什么可以傳入一個函數(shù)???

Swift中的函數(shù)就是閉包

閉包有三種形式:
        
1. 全局函數(shù)是一個有名字但不會捕獲任何值的閉包。
        
2. 嵌套函數(shù)是一個有名字并可以捕獲到其封閉函數(shù)域內(nèi)的值的閉包喂江。
        
3. 閉包表達式是一個利用輕量級語法所寫的召锈,可以捕獲其上下文中變量或常量值的匿名閉包。

將一個全局函數(shù) greetPeople 作為一個閉包來使用的
將 greetPeople 函數(shù)作為 guestList 數(shù)組的 map 函數(shù)的參數(shù)傳入获询,并返回一個新的數(shù)組 fullGreetings

1.閉包表達式其實是函數(shù)的字面值涨岁,官方一般稱之為匿名函數(shù).一般當我們需要使用函數(shù)快速的實現(xiàn)一個簡短的處理邏輯并且只使用一次的時候,我們可以省去函數(shù)名
可以直接使用閉包表達式來處理

let fullGreetings = guestList.map({(person: String) -> String 
    in return "Hello, \(person)!"
})

2.Swift中有類型推斷的特性吉嚣,所以我們可以去掉參數(shù)類型

let fullGreetings = guestList.map({(person) -> String in
    return "Hello, \(person)!"
})

3.編譯器可以根據(jù) in 之前的返回值類型和 return 之后的返回數(shù)據(jù)類型自動判斷梢薪,所以我們可以省略返回值和 return 關(guān)鍵字

let fullGreetings = guestList.map({person in
    "Hello, \(person)!"
})

4.Swift中還提供了參數(shù)的簡寫方式: $0 代表第一個參數(shù)、 $1 代表第二個參數(shù)以此類推尝哆。所以我們又可以將參數(shù)名稱省略

let fullGreetings = guestList.map ({ "Hello,\($0)"})

5.當函數(shù)的最后一個參數(shù)是閉包時秉撇,可以將閉包寫在 () 之外,這也是Swift的一個特性,所以我們還可以繼續(xù)簡化

let fullGreetings = guestList.map(){ "Hello, \($0)!" }

6.當函數(shù)有且僅有一個參數(shù)畜疾,并且該參數(shù)是閉包時赴邻,不但可以將閉包寫在 () 外,還可以省略 ()

let fullGreetings = guestList.map{ "Hello, \($0)!" }

小練習

// 例子1:對一個Int類型數(shù)組的元素進行2倍放大啡捶。如:[1,2,3]->[2,4,6]姥敛。
let arr = [1,2,3]
let doubled = arr.map{
  $0 * 2
}
print(doubled)
// 輸出:[2,4,6]
例子2: 將Int類型數(shù)組轉(zhuǎn)換為包含對應String類型的數(shù)。如:[16,58,510] -> ["OneSix", "FiveEight", "FiveOneZero"]瞎暑。

let digitNames = [
            0: "Zero",1: "One", 2: "Two",3: "Three", 4: "Four",
            5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
        ]
let numbers = [16, 58, 510]
        
let strings = numbers.map { ( num ) -> String in
            var output = ""
            var new = num
            while new > 0 {
                output = digitNames[new % 10]! + output
                new /= 10
            }
            return output
        }
print(strings)
// 輸出:["OneSix", "FiveEight", "FiveOneZero"]

參考文章
1.Swift中的閉包(Closure)
2.Swift Map方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彤敛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子了赌,更是在濱河造成了極大的恐慌墨榄,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勿她,死亡現(xiàn)場離奇詭異袄秩,居然都是意外死亡,警方通過查閱死者的電腦和手機逢并,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門之剧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砍聊,你說我怎么就攤上這事背稼。” “怎么了玻蝌?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵蟹肘,是天一觀的道長。 經(jīng)常有香客問我俯树,道長帘腹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任聘萨,我火速辦了婚禮竹椒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘米辐。我一直安慰自己,他們只是感情好书释,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布翘贮。 她就那樣靜靜地躺著,像睡著了一般爆惧。 火紅的嫁衣襯著肌膚如雪狸页。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音芍耘,去河邊找鬼址遇。 笑死,一個胖子當著我的面吹牛斋竞,可吹牛的內(nèi)容都是我干的倔约。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坝初,長吁一口氣:“原來是場噩夢啊……” “哼浸剩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鳄袍,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤绢要,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拗小,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體重罪,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年哀九,在試婚紗的時候發(fā)現(xiàn)自己被綠了剿配。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡勾栗,死狀恐怖惨篱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情围俘,我是刑警寧澤砸讳,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站界牡,受9級特大地震影響簿寂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宿亡,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一常遂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挽荠,春花似錦克胳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跃赚,卻和暖如春笆搓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工满败, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肤频,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓算墨,卻偏偏與公主長得像宵荒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子米同,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 86.復合 Cases 共享相同代碼塊的多個switch 分支 分支可以合并, 寫在分支后用逗號分開骇扇。如果任何模式...
    無灃閱讀 1,364評論 1 5
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,801評論 1 10
  • 本章將會介紹 閉包表達式尾隨閉包值捕獲閉包是引用類型逃逸閉包自動閉包枚舉語法使用Switch語句匹配枚舉值關(guān)聯(lián)值原...
    寒橋閱讀 1,559評論 0 3
  • 梅妝初過少孝,眉如遠山故畫作,羅衫輕解云端臥熬苍。剪妝翠紅稍走,丁香櫻桃破。 蕙帶袖雪醪浥涴柴底,紅茸卻向村夫唾婿脸。十年浣花求一諾...
    不無草堂主人閱讀 200評論 3 4
  • 看到別人轉(zhuǎn)這個覺得真的寫的挺實在的,圈子不同道理確是相通的柄驻。 就我自己而言狐树,感覺很多時候大范圍掐架其實是可以避免的...
    青桃十三宇閱讀 619評論 0 0