-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
해결됨
클로저 질문입니다.
19.08.01 14:24 작성 조회수 127
0
안녕하세요 공부하다 질문드립니다.
closure : (String) -> Bool
여기서 closure는 매개변수명이고, (String)-> Bool이 매개변수타입이잖아요?
근데 타입에는 String, Int , Doble 타입 등이 올수 있는데
(String) -> Bool 이란 타입이라고 이해했는데 맞는지요?
또 , 왜 (String) -> Bool 이 클로져 타입인지 모르겠습니다.
클로져 타입의 기본틀은 { ( ) -> type in code }
이렇게 알고있는데
어째서 (String) -> Bool 이 부분이 클로져라고하는건가요?
답변을 작성해보세요.
1
iOS Developer - 이정
지식공유자2019.08.02
안녕하세요
거의 맞게 알고 계시고 조금 햇갈려 하시는 것 같아 정리해 드리자면.
1. closure를 선언 하는 문법은 아래 형식입니다.
- { (parameters) -> return type in
- statements
- }
- 즉 closure를 만들때는 질문하신 형태가 맞습니다.
- 그런데 어딘가에서 받기 위해 타입을 정의만 하는 곳이 있다면 아래와 같이 괄호와 in은 빠지고 정의해야 합니다.
- (parameters) -> return type
이해하신 것 처럼
let someInt: Int -> Int 타입
let someString: String -> String 타입
이렇게 되죠. 마찬가지로 아래처럼 선언할 수 있는데
let someClosure: (Int) -> Void
참고로 class 안에서 선언하면
let someClosure: ((Int) -> Void)! = nil
이런 느낌으로 해야되겠죠
이걸 Closure타입이라고 표현하는거라고 이해하시면 될 것 같습니다.
물론 풀어서 Int를 받는 리턴없는 블록이라는 표현도 하고 익명함수 타입이라고 표현하기도 합니다.
표현하는 말이 좀 다를 뿐 의미는 다 같습니다.
예로 아래처럼 closure를 만들어서
let printDouble = { (num: Int) -> Void in
print(num * 2)
}
위에서 someClosure를 만들었으니
someClosure = printDouble
이렇게 대입해서 써도 됩니다.
만드는 부분과 대입하는 부분의 형태구성만 잘 이해하시면 될 것 같습니다.
답변 1