스위프트 고차함수 swift higher-order function
import Swift
/*
- 고차함수
전달인자로 함수를 전달받거나
함수실행의 결과를 함수로 반환하는 함수
map, filter, reduce
*/
// - map
// 컨테이너 내부의 기존 데이터를 변형(transform)하여 새로운 컨테이너 생성
let numbers: [Int] = [0,1,2,3,4]
var doubledNumbers: [Int]
var strings: [String]
// for 구문 사용
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"]
// map 메서드 사용
// numbers의 각 요소를 2배하여 새로운 배열 반환
doubledNumbers = numbers.map({ (number: Int) -> Int in
return number * 2
})
// numbers의 각 요소를 문자열로 변환하여 새로운 배열 반환
strings = numbers.map({ ( number: Int) -> String in
return "\(number)"
})
print(doubledNumbers)
print(strings)
// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers)
// - filter
// 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출
// for 구문 사용
// 변수 사용에 주목하세요
var filtered: [Int] = [Int]()
for number in numbers {
if number % 2 == 0 {
filtered.append(number)
}
}
print(filtered)
// filter 메서드 사용
// numbers의 요소 중 짝수를 걸러내어 새로운 배열로 반환
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]
//MARK: - reduce
// 컨테이너 내부의 콘텐츠를 하나로 통합
let someNumbers: [Int] = [2, 8, 15]
//MARK: for 구문 사용
//변수 사용에 주목하세요
var result: Int = 0
// someNumbers의 모든 요소를 더합니다.
for number in someNumbers {
result += number
}
print(result) // 25
//MARK: reduce 메서드 사용
// 초기값이 0 이고 someNumbers 내부의 모든 값을 더합니다.
let sum: Int = someNumbers.reduce(0, {
(first: Int, second: Int) -> Int in
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
// 모든 값을 곱하고 싶을 때
print(someNumbers.reduce(1) { $0 * $1}) // 240
'Swift > 기초&문법' 카테고리의 다른 글
스위프트 할일 앱 노티피케이션 swift Todos nofitication (0) | 2018.10.12 |
---|---|
스위프트 함수 스코프 swift function return scope (0) | 2018.10.11 |
스위프트 오류처리 swift Error (0) | 2018.10.09 |
스위프트 성격유형검사 앱 swift DISCTest (0) | 2018.10.08 |
스위프트 로그인앱 swift Login 절차 (0) | 2018.10.07 |