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

 

반응형