클로져 (closure)
- 함수와 동일하게 어떤 태스크를 수행하기 위한 코드 블록
- 두 가지로 나눌 수 있음
- 이름이 있는 클로져 → 함수
- 이름이 없는 클로져 → 이번에 배울것
{
(parameters) -> return type in
statements
}
in
기준으로 클로져 선언부
와 클로져 실행부
가 나뉨
- 클로져 선언부: 파라미터와 리턴타입 명시
- 클로져 실행부: 실행 코드 작성
- swift 에서는 클로져, 함수를 타입으로 사용할수 있음
- 따라서, 변수에 할당할수 있고, 다른 함수 파라미터로 전달할수도 있음
생성
let checking = { (id: String) -> Bool in
if id == "User000" {
return false
}
return true
}
let isValid = checking("User123") // true
closure as parameter
func validate(id: String, checking: (String) -> Bool) -> Bool {
// Some Preparation work here..
print("Validation 준비중...")
let isValid = checking(id)
return isValid
}
let validationResult = validate(id: "User002", checking: checking) // true
// return 이 없는 클로져의 경우 "-> Void" 통해서 반환시키는 것이 없음을 표시함
let printHello = {
print("Hello Swift")
}
func doSomeClosure(_ action: () -> Void) {
action()
}
doSomeClosure(printHello)
- closure 를 따로 만들어 놓지 않고, 함수 수행시 바로 작성하기
let validationResult2 = validate(id: "User001", checking: { (id: String) in
if id == "User000" {
return false
}
return true
})
closure 줄여보기
// 길게
let validationResult2 = validate(id: "User001", checking: { (id: String) in
if id == "User000" {
return false
}
return true
})
// 중간 단계
let validationResult3 = validate(id: "User001") { id in
let isValid = id != "User000"
return isValid
}
// 짧게
let validationResult4 = validate(id: "User002") { $0 != "User000" }