고차 함수는 하나 이상의 함수를 인자로 사용하거나 그 결과로 함수를 반환하는 함수입니다.
Swift의 고차함수는 forEach, map, CompactMap, flatMap, filter, reduce, sort 및 sorted 가 있습니다.
ForEach
forEach는 배열의 모든 요소를 반복하고 반환값이 없습니다.
let coins = [10, 20, 30, 50, 100]
// for in
for coin in coins {
print("\(coin)원")
}
// forEach
coins.forEach { (coin) in
print("\(coin)원")
}
// forEach 축약형
coins.forEach { print("\($0)원")}
“forEach”는 “for in”처럼 작동하지만 기본적인 차이점은 break 및 continue 문을 사용하여 forEach의 클로저를 종료 할 수 없다는 것입니다.
map
map은 배열의 모든 요소를 반복하고 업데이트 된 배열을 반환합니다.
let coins = [10, 20, 30, 50, 100]
var coinStrings: [String] = []
for coin in coins {
coinStrings.append("\(coin)원")
}
print(coinStrings)
// map
let map = coins.map { (coin) -> String in
"\(coin)원"
}
print(map)
// map 축약형
let short_map = coins.map { "\($0)원"}
print(short_map)
compactMap
compactMap은 배열의 모든 요소를 반복하고 compactMap 본문 내부에 작성된 조건을 만족하는 요소의 배열을 반환합니다. nil 값을 생성하는 모든 요소는 제외됩니다.
let coins = ["10", "20", "30원", "50", "100"]
var coinStrings: [String] = []
for coin in coins {
if let coin = Int(coin) {
coinStrings.append("\(coin)원")
}
}
print(coinStrings)
// compactMap
let compactMap = coins.compactMap { coin in
Int(coin)
}
print(compactMap)
// compactMap 축약형
let short_map = coins.compactMap { Int($0) }
print(short_map)
flatMap
flatMap은 2차원 배열을 1차원 배열로 변환합니다.
let arrayOfCoins = [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
let arrayOfCoin = arrayOfCoins.flatMap { coins in
coins
}
print(arrayOfCoin)
let arrayOfCoinShort = arrayOfCoins.flatMap { $0 }
print(arrayOfCoinShort)
filter
filter는 배열의 모든 요소를 반복 하면서 필터 본문 내부에 작성 된 조건을 충족하는 요소로만 업데이트 된 배열을 반환합니다.
let coins = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let lessThanSix = coins.filter { coin in
coin < 6
}
print(lessThanSix)
let lessThsnSixShort = coins.filter { $0 < 6 }
print(lessThsnSixShort)
reduce
reduce는 배열의 모든 요소를 반복하고 모든 요소의 결합 된 값을 가진 객체를 반환합니다.
let coins = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sumOfCoins = coins.reduce(0) { (result, coin) -> Int in
result + coin
}
print(sumOfCoins)
let sumOfCoinsShort = coins.reduce(0) { $0 + $1 }
print(sumOfCoinsShort)
sort(by:) and sorted(by:)
sort (by :)는 클로저 본문에 쓰여진 조건에 따라 모든 요소를 정렬합니다.
sorted (by :)는 클로저 본문에 쓰여진 조건에 따라 모든 요소를 정렬하고 새로운 배열을 반환합니다.
var coins = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
let sortedCoins = coins.sorted()
print(sortedCoins)
let sortedCoins2 = coins.sorted { (a, b) -> Bool in
a < b
}
print(sortedCoins2)
coins.sort()
print(coins)
coins.sort { (a, b) -> Bool in
a < b
}
print(coins)
다음은 sort (by 🙂 및 sorted (by :)에 대한 축약구문입니다.
var coins = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
let sortedCoins = coins.sorted { $0 < $1 }
print(sortedCoins)
coins.sort { $0 < $1 }
print(coins)