고차함수

Groot·2022년 6월 7일
0

TIL

목록 보기
17/153
post-thumbnail
post-custom-banner

TIL

🌱 난 오늘 무엇을 공부했을까?

📍 고차함수

  • 함수를 인자로 전달받거나 함수 실행의 결과를 함수로 반환하는 함수를 고차함수라고 말한다.
  • 고차함수는 인자로 받은 함수를 필요한 시점에 호출하거나 클로저를 생성하여 반환한다.
  • 스위프트는 일급 객체로 이루어졌다.

📍 map

  • 자신을 호출할 때 파라미터로 전달된 함수를 실행해서 그 결과값을 반환하는 함수다.
  • 기존의 컨테이너의 값은 변경되지 않고 새로운 컨테이너가 생성되어 반환된다.

📍 filter

  • filter함수는 컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출 하는 함수다.

    배열의 : filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]

  • isIncluded: 시퀀스의 요소를 인수로 사용하고 요소가 반환된 배열에 포함되어야 하는지 여부를 나타내는 부울 값을 반환하는 클로저입니다.

    문자열 : func filter(_ isIncluded: (Character) throws -> Bool) rethrows -> String

  • 예문

var filterTestArray = ["1", "+", "2","-", "3"]

print(filterTestArray)

filterTestArray = filterTestArray.filter { (element: String) in
    guard Int(element) != nil else {
        return false
    }
    return true
}
print(filterTestArray)


filterTestArray = filterTestArray.filter({ String in
    Int(String) ?? 0 > 1
})
 print(filterTestArray)


filterTestArray = filterTestArray.filter { Int($0) ?? 0 > 2 }
print(filterTestArray)


filterTestArray = filterTestArray.filter { !Character($0).isNumber }
print(filterTestArray)


let filterTestString = "123asd"
print(filterTestString.filter { Character in
    Character.isNumber
})//


var dropFirstTestArray = ["1", "+", "2","-", "3"]
print(dropFirstTestArray.dropFirst())


var dropLastTestArray = ["1", "+", "2","-", "3"]
print(dropLastTestArray.dropLast())

🔗 closure

  • 문맥에서 타입 추론
  • 단일 표현 클로저에서의 암시적 반환
  • 인자 이름 축약
  • 후행 클로저
var number = [1, 4, 5, 2, 3, 7, 8, 6]

number.sorted(by: { (s1: Int, s2: Int) -> Bool in return s1 > s2 } )
// 클로저의 기본 표현법 by 의 매개변수 값으로 클로저를 사용

// 문맥에서 타입 추론
number.sorted(by: {s1, s2 in return s1 > s2})
# /* sorted(by:)의 메소드에서 이미 (Int, Int) -> Bool 타입의 인자가 들어와야 하는걸 
알기 때문에 클로저에서 이 타입들은 생략이 가능하다.*/

// 단일 표현 클로저에서의 암시적 반환
number.sorted(by: { s1, s2 in s1 > s2 } )
// return 하는 값이 하나일 경우에 return 생략이 가능

// 인자 이름 축약
number.sorted(by: { $0 > $1 } )
// 값을 순서대로 $0, $1, $2 등으로 표현하여 인자 입력부분과 in 키워드 부분을 생략

number.sorted { $0 > $1 }
// 함수 마지막 인자가 클로저일때, 후행 클로저를 사용하면 () 생략이 가능하다.

// 후행 클로저
//func someNumber(closure: {
//    // 클로저의 내용
//})
// 함수의 마지막 인자가 클로저이면 후위 클로저 사용이 가능하다.

func someNumber() {
    // 클로저의 내용 -> 자주 사용했던 함수도 클로저의 형태
}

📍 reduce

  • 주어진 콜렉션의 원소를 조건에 맞게 결합시켜 하나의 형태로 만들어준다.
  • 데이터를 합쳐주는데 사용한다.

func reduce(initial: U, combine: (U, T) -> U) -> U

📍 compactMap

  • 원소에서 nil값을 제거해주는데 사용하는 함수다.

    func compactMap(_ transform: @escaping (Self.Output) -> T?) -> Publishers.CompactMap<Self, T>

📍 flatMap

  • 2차원 배열을 1차원으로 만들때 사용한다.
  • 2차원 배열에서 1차원 배열로 변환하면서 nil 값도 제거가 가능하다.
profile
I Am Groot
post-custom-banner

0개의 댓글