본 포스팅은 남 포스팅을 공부하며 정리한 내용이다.
원본 강좌 포스팅은 아래를 참고
(https://www.boostcourse.org/mo122/lecture/11297?isDesc=false)
클로저를 포함해 요즘것들은 뭐가 그리 잘났다고 줄여대는지 도덕책 근본이 없다.
개발은 평생 지 혼자 싸들고 하나
남 생각도 할 줄 알아야 그기 사람 아이가 그기 마!
클로저는 다양하게 표시할 수 있는데 일단 클로저를 받아줄 함수를 선언하자
Int형의 인자 a, b 2개를 받고 클로저를 받을 method마찬가지로 Int형 2개와 리턴형은 당연히 Int다
콩에는 콩 팥에는 팥이다.
func calc(a:Int, b:Int, method:(Int, Int)-> Int) -> Int{
return method(a, b)
}
후행클로저
위 calc라는 함수의 마지막 파라메터가 클로저가 함수의 마지막 인자일 때 가능하며, 마지막 파라메터의 이름을 생략할 수 있다.
이렇게
result = calc(a:10, b:10) {(left:Int, right:Int) -> Int in
return left + right
}
반환타입 생략
상식적으로다가 파라메터가 Int가 넘어왔으면 Int를 리턴해준다라는것 정도는 컴파일러가 알기 때문에 리턴 타입인 -> Int는 생략해도 되겠다.
다만 in은 삭제 불가
이렇게 호출해야 하는걸
result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
return left + right
})
method를 날려줄 수 있고
result = calculate(a: 10, b: 10), method: { (left: Int, right: Int) -> Int in
return left + right
}
-> Int도 날려줄 수 있다.
result = calc(a:10, b:10) {(left:Int, right:Int) -> Int in
return left + right
}
최종 결과물은 이러하다.
retult = calc(a:10, b:10) {(left:Int, right:Int) in
return left + right
}
위에 단축한 결과와
아래 원래
result = calc(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
return left + right
})
단축 인자 이름
result = calc(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
return left + right
})
result = calc(a: 10, b: 10) {
return $0 + $1
}
암시적 반환
한줄로도 표현이 가능한데...
클로저가 반환값이 있다면 클로저의 마지막 줄 결과값을 암시적으로 반환값으로 치부하여 return 없이도 return
뭔 홍길동 호부호형도 아니고 리턴을 왜 리턴이라 하지 못하는지.
깔끔은 하지만 좀 그렇다.
result = calc(a: 10, b: 10) { $0 + $1 }
'swift' 카테고리의 다른 글
클로저 기초 1 (0) | 2023.07.10 |
---|---|
swift int 변수를 string형으로 변환 그리고 비교 (0) | 2018.11.21 |