Language/Swift
Swift - 고차함수
Jessi :D
2021. 7. 20. 23:35
스위프트 - 고차함수
- 다른 함수를 전달인자로 받거나, 함수실행의 결과를 함수로 반환하는 함수
MAP(변형)
- 컨테이너가 담고 있던 각각의 값을 매개변수를 통해 받은 함수에 적용한 후 새로운 컨테이너를 생성하여 반환
- 코드의 간결성, 재사용 용이, 컴파일러 최적화 성능이 좋음
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
★ map
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.map { $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]
★ for-in
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
var lowercaseNames = [String]()
for i in cast {
lowercaseNames.append(i.lowercased())
}
print(lowercaseNames)
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
var letterCounts = [Int]()
for i in cast {
letterCounts.append(i.count)
}
print(letterCounts)
// 'letterCounts' == [6, 6, 3, 4]
Filter(추출)
- 반환타입이 Bool인 매개변수 함수의 결과가 true면 새로운 컨테이너에 값을 담아서 반환
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
★ Filter
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let shortNames = cast.filter({ (value: String) -> Bool in
return value.count == 5
})
print(shortNames)
// Prints "["Kim", "Karl"]"
▼ 매개변수, 반환타입, 반환키워드를 생략한 후행 클로저 ▼
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let shortNames = cast.filter { $0.count < 5 }
print(shortNames)
// Prints "["Kim", "Karl"]"
★ for-in
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
var shortNames = [String]()
for i in cast {
if i.count == 3 {
shortNames.append(i)
}
}
print(shortNames)
// Prints "["Kim", "Karl"]"
Reduce(결합)
- 매개변수로 전달받은 함수의 연산 결과로 각 배열의 모든 값을 더함
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
★ reduce
let numbers = [1, 2, 3, 4]
let numberSum = numbers.reduce(0, { x, y in
x + y
})
// numberSum == 10
▼ 매개변수, 반환타입, 반환키워드를 생략한 후행 클로저 ▼
let numbers = [1, 2, 3, 4]
let numberSum = numbers.reduce(0, { $0 + $1 })
// numberSum == 10
★ for-in
let numbers = [1, 2, 3, 4]
var numberSum = 0
for i in numbers {
numberSum += i
}
// numberSum == 10
반응형