Swift资源库--Map方法

本文详细解析了Swift语言中CollectionType的extension中map方法的定义、语法及用法,包括@warn_unused_result、@noescape、throws、rethrows等关键字的作用,以及Generator的概念。通过两个具体例子展示了如何利用map方法对数组进行操作。
摘要由CSDN通过智能技术生成

CollectionType Map

CollectionType的extension中map方法的定义:

extension CollectionType {
    /// Return an `Array` containing the results of mapping `transform`
    /// over `self`.
    ///
    /// - Complexity: O(N).
    @warn_unused_result
    @rethrows public func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T]
    ...
}

@warn_unused_result:如果没有检查或者使用该方法的返回值,编译器就会报警告。

@noescape:用在函数的闭包参数上,意味着这个参数是唯一可被调用的(或者用在函数调用时以参数的方式出现),其意思是它的生命周期比函数调用的周期短,这有助于一些小小的性能优化,但最重要的是它屏蔽了闭包中对self.的需求。这使得函数的控制流比其他更加透明。

throws:可以抛出一个错误的函数或方法必需使用 throws 关键字标记。这些函数和方法被称为抛出异常函数(throwing fu nctions)和抛出异常方法(throwing methods)。

rethrows:一个函数或方法可以使用 rethrows 关键字来声明,从而表明仅当这个函数或方法的一个函数参数抛出错误时这个函数或方法才抛出错误。这些函数和方法被称为重抛出异常函数(rethrowing functions)和重抛出异常方法(rethrowing methods)。重抛出异常函数或方法必需有至少一个抛出异常函数参数。

Generator:提到数组我们就会想到遍历,一般的遍历可能都是从头到尾进行的。但是如果你有特殊的需求呢。你可能不想呆板的进行遍历。这时候Generators就可以派上用场了。Generators的存在是进行特殊癖好的数组遍历,其筛选出符合该癖好的下标索引到数组没有元素为止。Self.Generator.Element就是在遍历的元素。

简化一下map的定义:

func map<T>(transform: (Self.Generator.Element) -> T) -> [T]

可以看到,map 方法返回的是一个数组,其获取一个闭包表达式作为唯一参数,集合中的每个元素调用一次该闭包函数,并返回该元素所映射的值(也可以是不同类型的值)。具体的映射方式和返回值类型由闭包来指定。

看几个简单例子:

// 例子1:对一个Int类型数组的元素进行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类型数组存储商品金额,想把每个金额后面添加一个字符“$”,把数组转成字符串数组。如:[10,20,30,40] -> ["10¥","20¥","30¥","40¥"]
let moneyArray = [10,20,30,40]
let stringsArray = moneyArray.map{
    "\($0)$"
}
print(stringsArray)
// 输出:["10$","20$","30$","40$"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值