iOS开发ios开发那些事我的SWIFT收集

swift中的map函数用法

2017-06-19  本文已影响951人  Lxyang

摘要

有一次问同事,他面试时一般会问别人什么,然后他随便说了一些题目,有一些听了后一时间想不出来答案,自己感觉也挺有意思,于是记录一下,其中一个题目是:不允许使用for 、while 、do while等常用的循环方法,如何实现对数组中每个元素执行同一个操作。开始就想到OC中数组有一个方法makeobjectperformselector,而Swift中,map函数即可实现。

1. map函数

简单用map回答一下摘要中的方法,如果我们项目中,要对所有银行卡对象中的银行卡名称添加信用卡三个字,实现如下

var arrDebit : Array<XYJBank> = Array<XYJBank>() 
if let bankArr : Array<XYJBank> = Mapper<XYJBank>().mapArray(JSONArray: bankList){ // 这个方法是字典转模型数组方法(bankList是一个银行卡信息字典数组)
   arrCredit = bankArr.map({ (bank: XYJBank) -> XYJBank in // 对数组中每个对象的银行卡名称添加信用卡字样
        bank.cardType = cardType
        if(bank.cardType == "CREDITCARD") {
            bank.name = bank.name! + "信用卡"
        }
        return bank
   })
}

1.1 map 函数定义与简单使用

它可以对一个集合类型的所有元素做一个映射操作

func map(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]
抛开一些和关键逻辑无关的修饰符 简化:
func map(transform: (Self.Generator.Element) -> T) rethrows -> [T]
它接受一个(Self.Generator.Element) -> T 类型的闭包,而闭包中 Self.Generator.Element 类型的参数, 这个类型代表数组中当前元素的类型。 而这个闭包的返回值,是可以和传递进来的值不同的。
map函数的返回值是一个数组,数组里的元素类型为上面参数闭包所返回的类型,可与传入数组时原始类型不一致。

简单例子:

1、一维数组
let numbers = [1,2,3,4] 
let result = numbers.map { $0 + 2 }  // $0表示闭包中的第一个参数,这里只有一个参数,即当前遍历到的元数。
print(result) // [3,4,5,6] 

2、二维数组
let numbers2 = [[1,2,3],[4,5,6]];
var result = numbers2.map { $0.map{ $0 + 2 } }
print(result)// [[3, 4, 5], [6, 7, 8]]
//这个调用实际上是遍历了这里两个数组元素 [1,2,3] 和 [4,5,6]。 因为这两个元素依然是数组,所以我们可以对他们再次调用 map 函数。

参考学习地址:Swift 编程思想,第四部分:map all the things!
数组的 Map 方法

上一篇 下一篇

猜你喜欢

热点阅读