Swift 클로저 고급(2020.10.29)

K S Michael·2020년 10월 29일

swift TIL

목록 보기
11/29

후행 클로저
반환타입 생략
단축 인자이름
암시적 반환 표현

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

var return : Int

후행 클로저

클로저가 함수의 마지막 전달인자라면
마지막 매개변수 이름을 생략한 후
함수 소괄호 외부에 클로저를 구현할 수 있습니다.

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

print(result) // 20

반환타입 생략

claculate 함수의 method 매개변수는
Int 타입을 반환할 것이라는 사실을 컴파일러도 알기 때문에
굳이 클로저에서 반환타입을 명시해 주지 않아도 됩니다.
대신 in 키워드는 샹략할 수 없습니다.

result = calculate(a:10, b:10, method:{(left: Int, right: Int) in
retrun left + right
})
print(result) // 20

// 후행클로저와 함께 사용할 수도 있습니다.
result = calculate(a:10, b:10) {(left: Int, right: Int) in
retrun left + right
}
print(result) // 20

단축 인자이름

클로저의 매개변수 이름이 굳이 불필요하다면 단축 인자이름을 활용할 수 있습니다.
단축 인자이름은 클로저의 매개변수의 순서대로 $0, $1... 처럼 표현합니다.

result = calculate(a:10, b:10, method:{
return $0 + $1
})

print (result) //20

// 당연히 후행 클로저와 함께 사용할 수 있습니다.
result = calculate(a:10, b:10){
return $0 + $1
}
print ( result ) // 20

암시적 반환 표현

result = calculate(a:10, b:10){
$0 + $1
}
print ( result ) // 20

// 간결하게 하 줄로 표현해 줄 수도 있다.
result = calculate(a:10, b:10) { $0 + $1 }
print ( result ) // 20

축약하지 않은 클로저 문법과 축약 후의 문법 비교

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

result = calculate(a:10, b:10){$0 + $1}

print(result) //20

컴파일러가 알아 듣는다고 반드시 사람이 알아볼수 있는 것은 아니다!
축약도 정도 것 필요에 따라!!! 알아서 잘하자!!!

출처 : 유튜브 "yagom"

profile
차근차근

0개의 댓글