itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • binding
  • SwiftUI
  • ios
  • 개발자
  • AppleDevloperAcademy
  • POSTECH
  • 세그멘테이션
  • SWIFT
  • mongodb
  • 생활코딩
  • 킨디
  • 점주
  • nosql
  • CoreData
  • 어플
  • 독립서점
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • CS
  • crud
  • 연결리스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

iOS/Swift

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 18. 클로저 고급

2021. 7. 23. 19:33

클로저 고급 - 다양한 클로저 표현

1. 후행 클로저 : 함수의 매개변수 마지막으로 전달되는 클로저는 후행 클로저(trailing closure)로 함수 밖에 구현할 수 있음

2. 반환 타입 생략 : 컴파일러가 클로저의 타입을 유추할 수 있는 경우 매개변수, 반환 타입 생략 가능

3. 단축 인자 이름 : 전달 인자의 이름이 굳이 필요 없고, 컴파일러가 타입을 유추할 수 있는 경우 축약된 전달 인자 이름 사용. how? $0, $1, $2 ...

4.암시적 반환 표현 : 반환 값이 있는 경우, 암시적으로 클로저의 맨 마지막 줄은 return 키워드를 생략하더라도 반환 값으로 취급

 

 

 

기본 클로저 표현

//클로저를 매개변수로 갖는 함수 calculated)
func calculate(a:Int, b:Int, method:(Int,Int) -> Int{
	return method(a,b)
}
//결과값을 저장할 변수 result 선언
var result: Int

 

 

후행 클로저

클로저가 함수의 마지막 전달 인자일 때 마지막 매개변수 이름을 생략한 후 함수 소괄호 밖에 클로저 구현 가능

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

print(result) //20

클로저가 시작되는 { 기호를 보면 calculate가 닫히고 외부에서 구현된 것을 확일할 수 있다

 

 

 

반환타입 생략

calculate(a:b:method:) 함수의 method 매개변수는 Int 타입을 반환할 것이라는 사실을 컴파일러도 안다.

굳이 클로저에서 반환 타입을 명시해주지 않아도 됨. 하지만 In 키워드는 생략 불가능

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

print(result) //20

//후행 클로저와 함께 사용 가능!
result=calculate(a:10,b:10) { (left:Int,right:Int) in
	return left+right
}

print(result) //20

원래는 클로저 구문에서 right:Int) -> Int in 이었는데 Int를 생략함

 

 

 

단축 인자 이름

클로저의 매개변수 이름이 굳이 불필요하다면 단축 인자 이름 활용 가능. 단축 인자 이름은 클로저의 매개변수 순서대로

$0, $1, $2 ... 로 표현

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

원래는 클로저 구문에서 {left:Int, right:Int 가 있었는데 생략했음

 

 

 

암시적 반환 표현

클로저가 반환하는 값이 있다면 클로저의 마지막 줄의 결과값은 암시적으로 반환값으로 취급한다.

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

//한줄로 표현 가능
result=calculate(a:10, b:10) { $0+$1 }
print(result) //20

return 없이 바로 $0 + $1로 표현

 

 

기본형과 축약형을 비교해보자

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

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

코드란 게 사람끼리 서로 보면서 이해하고 비교하는 건데 너무 축약해버리면 이해하기 어렵다고 하니 적당히 축약하자~

'iOS > Swift' 카테고리의 다른 글

[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 20. 프로퍼티 감시자  (0) 2021.07.24
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 19. 프로퍼티  (0) 2021.07.24
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 17. 클로저 기본  (0) 2021.07.22
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 16. 클래스 vs 구조체 / 열거형  (0) 2021.07.21
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 15. 열거형  (0) 2021.07.21
    'iOS/Swift' 카테고리의 다른 글
    • [iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 20. 프로퍼티 감시자
    • [iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 19. 프로퍼티
    • [iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 17. 클로저 기본
    • [iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 16. 클래스 vs 구조체 / 열거형
    itisjustK
    itisjustK

    티스토리툴바