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
- controller
- permission
- datetime
- changenotifier
- consumer
- borderRadius
- Snapshot
- transform
- reference
- Firebase
- Swift
- user
- setstate
- divider
- ListView.builder
- signout
- enum
- switch
- 문법
- Camera
- runTransaction
- globalkey
- multiprovider
- snackbar
- Stream
- provider
- Navigator
- changenotifierprovider
- swift 문법
- platformexception
Archives
- Today
- Total
코딩하는 제리
[Swift] swift 클로저 본문
// 클로저는 Named 클로저, Unnamed 클로저 두 종류
// 일반적으로 함수를 만드는 자체가 Named 클로저이다. 편의상 함수라고 부름.
// 이름이 없는 함수를 익명함수. 즉, Unnamed 클로저라고 함.
// 보통 Unnamed 클로저를 그냥 클로저라고 부른다.
// 파라미터와 리턴이 없는 클로저
let closure = { () -> () in
print("Closure")
}
// 파라미터와 리턴이 있는 클로저
let closure = { (name: String) -> String in
return "Hello, \(name)"
}
closure("jerry")
// 클로저에서는 Argument Label을 사용하지 않는다. 오로지 Parameter Name
closure(name: "jerry") // 에러
// 클로저를 변수나 상수에 대입 가능
let closure = { () -> () in
print("Closure")
}
let closure2 = closure // 가능
// 함수의 파라미터 타입으로 클로저 전달 가능
// 파라미터로 함수를 넘겨줘도 되지만
func doSomething(closure: () -> ()) {
closure()
}
// closure 라는 파라미터에 클로저로 바로 넘겨줘도 된다.
doSomething(closure: { () -> () in
print("Hello")
})
// 함수의 반환 타입으로 클로저 사용
func doSomething() -> () -> () {
return { () -> () in
print("Hello")
}
}
// 클로저 실행
let closure = { () -> String in
return "Hello"
}
closure()
// 클로저 직접 실행
// 클로저를 소괄호로 감싸고 호출 구문인 () 추가
({ () -> () in
print("Hello")
})()
클로저 경량 문법
// 클로저를 매개변수로 받는 함수
func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
return method(a, b)
}
var result: Int
// 후행 클로저 (Trailling Closure)
// 파라미터 값 형식이 아닌 함수 뒤에 붙여 작성하는 문법
result = calculate(a: 10, b: 10) { (left: Int, right: Int) -> Int in
return left + right
}
// 반환 타입 생략
// calculate 함수의 method 매개변수는
// Int 타입을 반환할 것이라 알고 있기에 -> Int 생략 가능
result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) in
return left + right
})
// 반환 타입 생략 + 후행 클로저
result = calculate(a: 10, b: 10) { (left: Int, right: Int) in
return left + right
}
// 단축 인자 이름
// 클로저의 매개변수 이름이 굳이 필요없다면 사용 가능
// 단축 인자 이름은 클로저의 매개변수의 순서대로 $0, $1... 처럼 표현 가능
// in 제거 가능
result = calculate(a: 10, b: 10, method: {
return $0 + $1
})
// 단축 인자 이름 + 후행 클로저
result = calculate(a: 10, b: 10) {
return $0 + $1
}
// 암시적 반환 표현
// 클로저가 반환하는 값이 있다면
// 클로저의 마지막 줄의 결과값은 암시적으로 반환값으로 취급
result = calculate(a: 10, b: 10) { $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 }
print(result) // 20
'iOS > SwiftUI' 카테고리의 다른 글
[Swift] swift 클로저 캡쳐 (0) | 2022.01.07 |
---|---|
[Swift] swift 클로저 - @autoclosure, @escaping (0) | 2022.01.04 |
[Swift]열거형(enum)/rawValue (0) | 2022.01.03 |
[Swift] swift 구조체/클래스 (0) | 2022.01.03 |
[Swift] swift 조건문/반복문 (0) | 2022.01.03 |
Comments