美文网首页
Swift高阶函数

Swift高阶函数

作者: CombatReadiness | 来源:发表于2023-11-28 18:23 被阅读0次

Swift高阶函数常用到的有:map、flatMap、compactMap、filter、reduce、sorted、forEach

map

map可以理解为转换,可以对集合中的每个元素做处理,看例子:

let nums = [1,2,3]
let nums1 = nums.map({String($0)})
let nums2 = nums.map({$0*5})
print(nums1,nums2)//控制台打印["1", "2", "3"] [5, 10, 15]

flatMap&compactMap

flatMap官方解释:In fact, s.flatMap(transform) is equivalent to Array(s.map(transform).joined())
说白了就两点降阶去空,当集合中含有nil时,不具有降阶效果,但是集合本身若是一阶不会再降阶,只具有去空效果,且会报警告: flatMap is deprecated: Please use compactMap(_:) for the case where closure returns an optional value,不含nil时才有降阶效果

compactMap官方解释:Use this method to receive an array of non-optional values when your transformation produces an optional value
说白了就是集合中含有nil时,具有去空效果

下面我们看几个例子,就能理解了

let nonNullArray = [[1,2,3], [4,5], [6, 7, 8, 9]]
let nonNullFlatMapArray = nonNullArray.flatMap {$0}
print(nonNullFlatMapArray)//控制台打印[1, 2, 3, 4, 5, 6, 7, 8, 9]
let nonNullCompactMapArr = nonNullArray.compactMap{$0}
print(nonNullCompactMapArr)//控制台打印[[1, 2, 3], [4, 5], [6, 7, 8, 9]]

let hadNullArray = [[1,2,3], [4,5], [6, 7, 8, 9],nil]
let hadNullFlatMapArray = hadNullArray.flatMap {$0}
print(hadNullFlatMapArray)//控制台打印[[1, 2, 3], [4, 5], [6, 7, 8, 9]]
let hadNullCompactMapArr = hadNullArray.compactMap{$0}
print(hadNullCompactMapArr)//控制台打印[[1, 2, 3], [4, 5], [6, 7, 8, 9]]

let charArray = ["1","2","3","A","B"]
let charFlatMapArray = charArray.flatMap { temChar -> Int? in
    return Int(temChar)
}
print(charFlatMapArray)//控制台打印[1,2,3]
let charCompactMapArray = charArray.compactMap { temChar -> Int? in
    return Int(temChar)
}
print(charCompactMapArray)//控制台打印[1,2,3]

filter

filter可以理解为筛选,闭包里即是自定义条件

let orgNums = [1,3,5,7,9]
let filterNums = orgNums.filter({$0>3})
print(filterNums)//控制台打印[5,7,9]

reduce

reduce可以理解为累计,reduce有两个函数reduce(_:_:)reduce(into:_:),两个的效果都是一样的,只是使用不同,第一个参数都为初始值

let totalNums = [1,2,3,4]
let totalReduceNum1 = totalNums.reduce(into: 0) { partialResult, num in
    partialResult += num
}
print(totalReduceNum1)//控制台打印10
let totalReduceNu2 = totalNums.reduce(0) { num1, num2 in
    num1 + num2
}
print(totalReduceNu2)//控制台打印10

sorted

sorted说白了就是对集合指定规则排序

let sortedNums = [1,5,9,4,2]
let sortedResultNums = sortedNums.sorted { num1, num2 in
    num1 < num2
}
print(sortedResultNums)//控制台打印[1,2,4,5,9]

forEach

forEach即是对集合每个元素做处理,且并没有返回值

let eachNums = [1,2,3]
var eachNewStrNums:[String] = []
eachNums.forEach({eachNewStrNums.append("\($0)")})
print(eachNewStrNums)//控制台打印["1", "2", "3"]

相关文章

网友评论

      本文标题:Swift高阶函数

      本文链接:https://www.haomeiwen.com/subject/yghxgdtx.html