iOS学习iOS Developer

swift 随笔:闭包及数组三大高阶函数

2017-03-15  本文已影响51人  Theendisthebegi
  1. 简介
    Swift一大特性便是使用简洁的头等函数
    闭包语法代替了复杂的blocks语法。希望我们在Swift中不再需要像fuckingblocksyntax中所描述的语法。(头等函数-即可将函数当作参数传递给其他的函数,或从其他的函数里返回出值,并且可以将他们设定为变量,或者将他们存储在数据结构中)。 闭包是自包含的blocks,它能在代码中传递和使用。Blocks/闭包(同一概念的不同命名)在Cocoa和Cocoa Touch中广泛使用,是iOS 框架的核心。 闭包是极其强大的语言特性,它能够使我们编写程序的时候更快,更容易,更少出错。 Swift的标准数组支持三个高阶函数:map,filter和reduce。Objective-C的NSArray没有实现这些方法
  2. map函数
    map用于将每个数组元素通过某个方法进行转换。
    用一个例子来说明。今天我办生日聚会,要迎接很多人,并且为每个人都准备了一句欢迎词。我们要怎么做呢?首先我们将迎接的人放进一个数组名叫guestList,然后用一个名叫greetPeople的函数为每个人生成欢迎词:
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!"]

也当然也可以这样写

let guestList = ["Chris", "Jill", "Tim"]
let fullGreetings = guestList.map{"Hello, ($0)!"} 
print(fullGreetings) ($0 $1 分别表示第一第二个参数,以此类推)
  1. Filter函数
    顾名思义,是用来筛选的函数。 filter用于选择数组元素中满足某种条件的元素。
  let numbers = [2,8,6,3,7,15,89,453,23,1,0,53];

筛选出大于10的数字

numbers.filter({$0 >10})

就这么简单

  1. Reduce函数
    reduce方法把数组元素组合计算为一个值,并不是单指求和,而是自定义一个公式。
let numbers = [2,8,6,3,7,15,89,453,23,1,15,53];

求和

numbers.reduce(0, {$0 + $1})

这里的0是指初始数字。 也可以简写成

numbers.reduce(0, + )

同理,求积

numbers.reduce(1,*)
上一篇下一篇

猜你喜欢

热点阅读