Swift 고차함수
고차함수
- 고차함수는 '다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수'를 의미
- 스위프트의 함수(클로저)는 일급시민이기 때문에 함수의 전달인자로 전달할 수 있으며 함수의 결과값으로 반환할 수 있음
- may, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입(Array, Set, Dictionary 등)에 구현되어 있음
may
- 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너 생성
// 변형하고자 하는 numbers와 변형 결과를 받을 doublenumbers, strings
let numbers: [Int] = [0,1,2,3,4]
var doubledNumbers: [Int]
var strings: [String]
doubledNumbers = [Int]()
strings = [String]()
for number in numbers {
doubledNumbers.append(number * 2)
strings.append("\(number)")
}
print(doubledNumbers) // [0,2,4,6,8]
print(strings) // ["0", "1", "2", "3", "4"]
// numbers의 각 요소를 2배하여 새로운 배열 반환
doubledNumbers = numbers.map({ (number: Int) -> Int in
return number * 2
})
// numbers의 각 요소를 문자열로 변환하여 새로운 배열 변환
strings = numbers.map({ (number: Int) -> string in
return "\(number)"
})
print(doubleNumbers) // [0,2,4,6,8]
print(strings) // ["0", "1", "2", "3", "4"]
// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [0,2,4,6,8]
filter
- 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출함
var filtered: [Int] = [Int]()
for number in numbers {
if number % 2 == 0{
filtered.append(number)
}
}
print(filtered) // [0, 2, 4]
// filter 사용
let evenNumbers: [Int] = numbers.filter {(number: Int) -> Bool in
return number % 2 == 0
}
print(evenNumbers) // [0, 2, 4]
// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
let oddNumbers: [Int] = numbers.filter {
$0 % 2 != 0
}
print(oddNumbers) // [1, 3]
reduce
- 컨테이너 내부의 콘텐츠를 하나로 통합
let someNumbers: [Int} = [2, 8, 15]
var result: Int = 0
// 기존 for 구문
// someNumbers의 모든 요소를 더함
for number in someNumbers {
result += number
}
print(result)
// reduce 메서드 사용
// 초기값이 0이고 somenumbers 내부의 모든 값을 더함
let sum: Int = someNumbers.reduce (0, {( first: Int, second: Int) -> Int in
// print("\(first) + \(second)")
return first + second
)}
print(sum) // 25
// 초기값이 0이고 someNumbers 내부의 모든 값을 뺌
var subtract: Int = someNumbers.reduce(0, {(first: Int, second: Int) -> Int in
return first - second
})
print(subtract) // -25
// 초기값이 3이고 someNumbers 내부의 모든 값을 더함
let sumFromThree = someNumbers.reduce(3) { $0 + $1 }
print(sumFromThree) // 28
- reduce 메서드에 전달하는 클로저의 매개변수 이름을 first, second 보다는 result, currentItem과 같은 이름으로 정정하는 게 좋음
Author And Source
이 문제에 관하여(Swift 고차함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@esolit3/Swift-고차함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)