iOS Swift 문법 - Closure
포스트
취소

iOS Swift 문법 - Closure

안녕하세요. narvis2 입니다.
이번시간에는 Swift 문법에 중에서도 Closure에 대하여 알아보는 시간을 가지도록 하겠습니다.

🍀 Closure


  • 이름 없는 함수 (Kotlin 의 람다와 비슷, 즉 익명 함수)
    • 일반 함수 👉 이름이 있는 Closure 함수
  • 인자들을 넣을 수 있고, 반환타입까지 설정을 해줄 수 있음
  • 함수의 내용 👉 in 다음에 수행 내용 적기

일반함수 예제 👇

1
2
3
4
5
func add(x:Int, y:Int) -> Int {
    return (x+y)
}

print(add(x:10, y:20))

Closure 함수 예제 👇

1
2
3
4
5
let add1 = {(x: Int, y:Int) -> Int in
    return(x+y)
}

print(add(10, 20))

☘️ 후행 클로저(trailing closure)

  • closure함수의 마지막 argument라면 마지막 매개변수 이름을 생략한 후 함수 소괄호 외부에 closure를 구현할 수 있게
    • ✅ Kotlin 의 람다와 같음

예제 👇

1
2
3
4
5
6
7
8
9
10
//후행 클로저 미사용
let onAction = UIAlertAction(title: "On", style: UIAlertAction.Style.default, handler: {
    //실행 코드
})

//후행 클로저 사용
let onAction = UIAlertAction(title: "On", style: UIAlertAction.Style.default) {
    //실행 코드
})

☘️ Closure 의 축약 표현

  • 1️⃣ 타입 생략
    • 👉 closuremethod에서 요구하는 형태로 전달해야 함
    • 👉 swift는 이러한 문맥을 이용해 타입을 유추할 수 있음(타입 추론)
    • 👉 매개변수타입이나 반환 타입생략해서 closure를 사용할 수 있게 됨
  • 2️⃣ return 생략 👉 return 도 생략 가능
  • 3️⃣ 매개변수 생략
    • 👉 매개변수의 이름도 생략 가능
    • 👉 매개변수의 이름을 명시하지 않아도 $숫자의 조합으로 단축 인자 이름을 사용할 수 있음
    • 👉 $0 첫 번째 매개변수
    • 👉 $1 두 번째 매개변수
    • 👉 in 키워드도 생략 가능
  • 4️⃣ 연산자만 표기
    • 👉 매개변수의 타입과 반환 타입이 연산자를 구현한 함수의 모양과 동일하다면, 연산자만 표기하더라도 알아서 연산하고 반환해줌

예제 👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]

// 일반 closure
let reversed = names.sorted(by: { (s1: String, s2: String) -> Bool in
    return s1 > s2
})

// 1️⃣ 매개 변수 타입, 반환 타입 생략
let reversed2 = names.sorted(by: { (s1, s2) in
    return s1 > s2
})

// 2️⃣ Return 생략
let reversed3 = names.sorted(by: { (s1, s2) in
   	s1 > s2
})

// 3️⃣ 매개변수, in 키워드 생략
let reversed4 = names.sorted(by: {
    return $0 > $1
})

// 4️⃣ 연산자만 표기
let reversed5 = names.sorted(by: >)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.