반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 엑셀
- 자동화
- app
- Python
- openAI
- 데이터분석
- data
- 휴가관리
- 어플만들기
- 데이터
- 노코드앱
- 파이썬
- 앱시트
- lookML
- 앱만들기
- 구글스프레드시트
- 노코드
- 샤딩
- nocode
- 데이터저장
- Ai
- 인공지능
- appsheet
- Java
- Looker
- 데이터모델링
- 어플
- 자바
- 데이터시각화
Archives
- Today
- Total
공부한 것 꼭꼭 씹어먹기
closure 본문
반응형
클로저 : 코드에서 전달 및 사용할 수 있는 독립 기능 블록이며, 일급 객체의 역할을 할 수 있음
- 일급객체 : 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환값이 될 수 있다
// 클로저 표현식 : 주로 익명함수를 쓴다
{ (매개 변수) -> 리턴 타입 in
// 실행 구문
}
// 파라미터와 리턴타입이 없는 클로저 정의
let hello = { () -> () in
print("hello")
}
// 클로저 호출
hello()
// 파라미터와 리턴타입이 있는 클로저 정의
let hello2 = { (name: String) -> String in
return "Hello, \(name)"
}
// 클로저 호출
hello2(name: "Gunter") // 에러발생: 클로저에는 argument label이 없다. 위의 name은 그냥 파라미터 이름일뿐.
hello2("Gunter") // 이렇게 호출해야한다.
// 클로저를 함수의 전달인자로 전달하기
func doSomething(closure: () -> ()) {
closure()
}
doSomething(closure: {()->() in
print("hello")
})
doSomething() { // 이렇게 호출할 수도 있다.
print("hello2") // 파라미터와 리턴타입이 없는 클로저를 호출할때는 클로저 헤더와 in 키워드 생략가능.
}
doSomething { // 이렇게 호출할 수도 있다.
print("hello2") // 파라미터와 리턴타입이 없는 클로저를 하나만 호출할때는 ()도 생략가능.
}
// 클로저를 함수의 반환부로 사용하기
func doSomething2() -> () -> () {
return { () -> () in
print("hello4")
}
}
doSomething2()()
// 다중 후행 클로저 문법 🐣 아직 잘 모르겠...
func doSomething3(success: ()->(), fail: ()->()) {
}
// 클로저 표현 간소화
func doSomething4(closure: (Int, Int, Int) -> Int) {
closure(1,2,3)
}
doSomething4(closure: {(a,b,c) in
return a+b+c // 정석대로 클로저 호출
})
doSomething4(closure: {
return $0+$1+$2 // 약식인수를 통해 매개변수(a,b,c) 이름을 생략하여 사용가능
})
doSometing4(closure: {
$0+$1+$2 // 실행 구문에 단일 리턴값만 남으면 return 키워드도 생략 가능
})
doSometing4() {
$0+$1+$2 // 후행 클로저 문법
}
doSometing4 {
$0+$1+$2 // 파라미터에 단 하나의 클로저만 받는 경우 ()도 생략 가능
}
반응형
Comments