티스토리 뷰

Swift 문법 정리 - iOS

[Swift] 클로저

둥찬 2021. 8. 3. 00:26

클로저 

{ (parameters) -> return type in
	statements
}

{ (매개변수 목록) -> 반환타입 in
	실행 코드
}

클로저는 일급 시민으로 변수, 상수 등으로 저장, 전달 인자로 저장이 가능한 형태 !

 

* 일급 객체의 특징

1. 모든 일급 객체는 함수의 실질적인 매개 변수가 될 수 있다.

2. 모든 일급 객체는 함수의 반환값이 될 수 있다.

3. 모든 일급 객체는 할당의 대사이 될 수 있다.

4. 모든 일급 객체는 비교 연산 (==, equal)을 적용할 수 있다.

 

우리가 사용했던 함수들은 모두 "이름 있는 클로저" 형태라고 생각하면 된다.

함수로 작성했던 것들 모두 (이름없는 함수인) 클로저로 표현이 가능

// 함수 (이름있는 클로저) 사용
func sumFunction(a: Int, b: Int) -> Int {
	return a + b
}

var sumResult: Int = sumFunction(a: 1, b: 2)

// 일반 클로저 사용
let sum: (Int, Int) -> Int { (a: Int, b: Int) in
	return a + b 
}

let sumResult: Int = sum(1, 2)

후행 클로저

클로저가 함수의 마지막 전달인자라면
마지막 매개변수 이름을 정해서

함수 소괄호 외부에 클로저를 구현할 수 있다 ! 

func calculate(a: Int, b: Int, methodL (Int, Int) -> Int) -> Int {
	return method(a, b)
}

// a,b 라는 Int변수를 받고,
// (Int, Int) -> Int (Int 2개를 받아서 Int 1개 반환하는 클로저)
// 형태의 클로저를 매개변수로 받는 함수

var result: Int

result = calculate(a: 10, b: 10, method: { (left : Int, right : Int) -> Int in
	return left + right
})
// method에 left, right 를 받아서 더한 값을 반환하는 클로저를 넣은 모습

result = calculate(a: 10, b: 10) { (left: Int, right: Int) -> Int in
	return left + right
}

print(result) // 20

자료 보다가 깜짝 놀랐던 것이 ,,

dissmiss 메서드 completion 의 전달인자가 클로저였다는 사실,,

반환타입 생략

컴파일러 상에서 어떤 타입을 반환할 지 알고 싶다면

클로저에서는 반환타입을 명시해 주지 않아도 알아 듣는다.

 

result = calculate(a: 10, b: 10, method: { (left : Int, right : Int) -> Int in
	return left + right
})

-> result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) in
	return left + right
})


result = calculate(a: 10, b: 10) { (left: Int, right: Int) -> Int in
	return left + right
}

-> result = calculate(a: 10, b:10) { (left: Int, right: Int) in
	return left + right
}

in 키워드 생략 불가 !

단축 인자 이름 

클로저 상에서 매개변수 이름이 불필요하다면,

단축 인자이름을 활용할 수 있다.

단축 인자이름은 매개변수 순서대로 $0,$1,$2,$3 ... 로 표현 !

 

암시적 반환 표현

클로저가 반환하는 값이 있다면

마지막 줄의 결과값은 return 을 적지 않아도

암시적으로 반환값으로 취급 !

'Swift 문법 정리 - iOS' 카테고리의 다른 글

[Swift] 랜덤함수  (0) 2021.09.26
[Swift] assert? guard?  (0) 2021.08.24
[Swift] 클래스 VS 구조체 / 열거형  (0) 2021.08.02
[Swift] 인스턴스 / 프로퍼티 / 메서드  (1) 2021.08.02
[Swift] 열거형 (enum)  (0) 2021.08.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함