Closures - 1

9332 단어 swiftiOSiOS

Closure

{ ( parameters ) -> ReturnType in
           // statements //
}
-- param 과 return type 이 생략된 가장 단순한 클로저 --
{ // statements // }

let c = { pirnt("Hello") } // param, return 생략된 클로저, 자료형 : () -> ()

let c2 = { (str: String) -> String in	  // str 은 param name 이지 argument label이 아님
	return "Hello, \(str)"
}
c()   // Hello 
print(c2("Closure"))  // Hello Closure
  • Named Closures
    • Functiion
    • Nested Function
  • Unnamed Closures
    • Anonymous Function
  • 중괄호“{}”로 구분된 코드 블럭
  • 일급 객체의 역할을 할 수 있음
    ✅일급 객체 : 전달 인자, 변수/상수 등으로 저장하거나 전달, 함수의 반환 값 가능
  • 참조 타입
  • 함수는 클로저의 한 형태로, 이름이 있는 클로저이다.
  • objc 의 block
  • argument label 을 사용하지 않는다. → 클로저 호출시 argument label 쓰지 X
  • parameter 로 전달가능
----------------parameter 전달 예시----------------------
typealias SimpleStringClosure = (String) -> String
func perform(closure: SimpleStringClosure) {
	print(closure("iOS"))
}
perform(closure: c2)
=> Hello, iOS

perform(closure: { (str: String) -> String in
	return "Hi, \(str)"
}) // inline closure
-> Hi, iOS

Closure 활용

  • [Swift]Map, Filter, Reduce 그리고 추론

    1. Map

      클로저로 각 항목들을 반영한 결과물을 가진 새로운 배열 만듬

      let array = [0, 1, 2, 3]
      let multipliedArray = array.map( { (value: Int) -> Int in return value * 2 } )
      // [2, 4, 6, 8]
    2. Reduce

      배열의 각 항목들을 재귀적으로 클로저를 적용시켜 하나의 값 만듬

      array.reduce(0, { (s1: Int, s2: Int) -> Int in
          return s1 + s2
      })   //0 은 초기값
    3. Filter

      클로저로 각 항목들을 비교하여 일치하는 결과물을 가진 새로운 배열 반환

      let oddArray = array.filter( { (value: Int) -> Bool in return (value % 2 == 0) } )
      //[2, 4]

좋은 웹페이지 즐겨찾기