func funtionName (parameterName: inputDataType)-> output {
// implementing
return something
}
closure
{(parameterName) in statement }
func, functionName 지우기
'{'를 제일 앞으로 보내기
'{'가 있던 자리에 in을 입력
=> 이후 call된 어떤 함수의 parameter 자리에 이 closure를 넣어준다.
swift는 data type inference(데이터 타입 추론)기능이 있다. 그래서 input value에 따라 data type을 추론하게 하면 closure를 더 짧게 쓸 수 있다.
return 키워드도 없앨 수 있다. 근거는 이 함수가 closure안에 있기 때문이고, closure를 한 함수의 input으로 할 때, 이 closure의 parameter가 그 return value를 꺼내주기 때문이다.
swift에서 closure는 ananymous parameter name이란 기능을 갖고 있는데, 이는 '$'과 함께 사용되며 첫 parameter는 $0, 두번째 parameter는 $1로 표현 할 수 있다.
swift에는 한 가지 규칙이 있는데 한 함수의 마지막 parameter가 closure라면(즉, 마지막 parameter가 '{}'로 되어있다면) 그 parameter name을 지우고 이를 소괄호 밖으로 빼낼 수 있다.
calculator(n1: 2, n2: 3) {$0 * $1}