아요 개발 일기

[Swift] 고차 함수 본문

Swift/Grammar

[Swift] 고차 함수

소진이 2023. 1. 27. 18:44

전달인자로 함수를 전달 받거나 함수 실행의 결과를 함수로 반환하는 함수

> map

  • numbers의 각 요소를 2배하여 새로운 배열 반환
//MARK: - map

let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers: [Int]
var strings: [String]

//MARK: 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"]

//MARK: 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) //[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

  • 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출
//MARK: - filter
// 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출

//MARK: for 구문 사용
// 변수 사용에 주목하세요
var filtered: [Int] = [Int]()

for number in numbers {
    if number % 2 == 0 {
        filtered.append(number)
    }
}

print(filtered) //[0,2,4]

//MARK: 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]

> reduce

  • 컨테이너 내부의 콘텐츠를 하나로 통합
//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 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(2) { $0 * $1}) //240
 
 

'Swift > Grammar' 카테고리의 다른 글

[Swift] Struct - 구조체  (0) 2023.01.27
[Swift] Class - 클래스  (0) 2023.01.27
[Swift] 오류처리  (0) 2023.01.27
[Swift] Extension - 익스텐션  (0) 2023.01.27
[Swift] Protocol  (0) 2023.01.27