swift闭包高级功能

1:声明另一个数组filterNumbers

let filterNumbers = [1, 2, 3, 4, 5]

let filteredNumbers = filterNumbers.filter { $0 > 3 }

print(filteredNumbers) //prints [4, 5]

在这个例子中,我们过滤filteredNumbers,只保留大于3的项目。此示例还使用Swift的各种语法改进来确保我们的代码简洁。

2:我们试试看forEach一个数组叫做forEachNumbers:

let forEachNumbers = [1, 2, 3, 4, 5]

forEachNumbers.forEach { print($0) } //prints one item of the array on each line

使用forEach非常类似于使用for循环。再次,我们使用了许多语法改进来确保我们有干净的代码。

3:现在,让我们reduce试试看看reduceNumbers:

let reduceNumbers = [1, 2, 3, 4 ,5]

let reducedNumber = reduceNumbers.reduce(0) { $0 + $1 }

print(reducedNumber) //prints 15

reduce用于将集合减少为单个值。在我们的例子中,我们将所有数字加在一起reduceNumbers,并将其存入reducedNumber。

4:flatMap

再去一次!让我们用flatMap现在。声明一个数组flatMapNumbers。这一次,我们的起始数组与前面的例子有点不同,它包含nil值:

let flatMapNumbers = [1, nil, 2, nil, 3, nil, 4, nil, 5]

let flatMappedNumbers = flatMapNumbers.flatMap { $0 }

print(flatMappedNumbers) //prints [1, 2, 3, 4, 5]

flatMap遍历一个集合,使用输入关闭来操纵值。生成的集合只包含非零值。您会注意到,最终的数组不包含nil元素。flatMap对于从集合中删除可选值特别有用。

您可以链接更高阶的函数来创建强大的转换,这在一个变换中是不可能的。以下是一个例子:

let chainNumbers = [1, nil, 2, nil, 3, nil, 4, nil, 5]

let doubledNumbersOver8 = chainNumbers.flatMap { $0 }.filter { $0 > 3 }.map { $0 * 2 }

print(doubledNumbersOver8) //prints [8, 10]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容