이전 클로저 (1)에서는 매개변수로서 데이터를 여러 개 반환하는 클로저까지 알아보았다.
사실 클로저 관한 포스팅을 끝낼까 하다가 Optional 내용이라 해야 할 거 같다고 생각하여 글을 쓰게 된다.
sayHiOptional 메서드를 선언하는데 매개변수를 Optional로 ?를 붙여 선언하였다.
아래 실행부에서 sayHiOptional()를 실행하면 매개변수가 없이 실행이 되는 것을 확인할 수 있다.
또한 completion을 매개변수로 넣어 실행하면 매개변수 completion이 실행되는 것을 확인할 수 있다.
타입, 반환 정리
클로저 매개변수의 타입 정의와 반환 타입을 정의하는 것에 대해 이해하기 쉽게 정리하려 한다.
설명을 위해 코드블럭으로 코드와 주석으로 작성했다.
// 클로저 내에 매개변수를 void 타입으로 선언하고 return 타입도 void로 선언한 것이다.
() -> Void 와
func completion () {
// 실행부
} 동일하다.
// 이번엔 매개변수를 String 타입으로 선언하고 return 타입을 void로 선언한 것이다.
(String) -> Void 와
func completion(name: String) {
// 실행부
print(" 이름은 \(name) 이다")
} 동일
// 두 개의 매개변수를 String 타입으로 선언하고 return 타입도 이번엔 String 선언하였다.
(String, String) -> Void 와
func completion(first: String, second: String) -> String {
return "firstName : \(first), secondName : \(second) "
} 와 동일
클로저를 이렇게 사용한다고 생각할 수 있다.
마지막 출력문만 보면 myNumbers 배열을 반복하여 transformedNumbers 변수를
map 함수를 사용하여 String Array로 반환하여 선언하였다.
이러한 map, each 등등 collection에서 사용한 함수들이 사실 다 클로저의 일종이다.
map을 설계 당시 아마 예를 들어 C언어의 for(int i = 0; i < array.length; i++)처럼 i라는 임시 변수를 가지고 collection의 길이까지 반복하는 클로저를 만든 거라 생각한다.
클로저를 더 줄여서 저번 포스팅에 언급했던 $sign를 사용하여 클로저를 선언할 수 있다.
아마 $0을 선언하면 왜 배열 인덱스 0번째가 계속 나와야지 점점 증감하면서 반복이 되나요? 라는 생각이 들 수 있는데
이유는 이미 넌지시 언급하였다. 한번 생각해보길 권장한다.
늘 의심하는 관점이 늘고 해결할 수 있는 솔루션을 넓히는 것이 개발자의 덕목이라 생각한다.
'iOS > Swift 문법' 카테고리의 다른 글
Swift 기초 문법 - 클로저 (1) (0) | 2022.09.28 |
---|---|
Swift 기초 문법 - 프로퍼티 옵저버, 함수 매개변수, 제네릭 (0) | 2022.09.20 |
Swift 기초 문법 - for 반복문, 변수 unwrapping, struct와 class 차이 (0) | 2022.09.02 |
Swift 기초 문법 - 조건문, forEach 반복문, enum case (2) | 2022.09.01 |