클로저는 코드 블럭이다.
() -> ()
또는 () -> Void
로 표현하며, 이는 입력값과 출력값이 없는 클로저를 의미한다.다음과 같이 여러 경우의 입력값과 출력값을 가질 수도 있다.
String
이고 출력 형식이 Int
인 클로저 let lengthClosure: (String) -> Int = { (text: String) in
return text.count
}
let length = lengthClosure("Hello, Swift!")
print(length) // 출력: 13
block
파라미터를 사용한 클로저Timer
, 출력 형식이 없는 클로저를 인자로 받는다. Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
self.updateUI()
}
Int, Int
)를 받아 더한 결과(Int
)를 반환 let addClosure: (Int, Int) -> Int = { (a: Int, b: Int) in
return a + b
}
let result = addClosure(3, 5)
print(result) // 출력: 8
한 메서드 안에서 2개 이상의 클로저를 인자로 받아야 하는 경우에는 다음과 같은 방식으로 작성할 수 있다.
A(a: {
print("첫 번째 작업 실행")
}, b: {
print("두 번째 작업 실행")
})
let firstTask = {
print("첫 번째 작업 실행")
}
let secondTask = {
print("두 번째 작업 실행")
}
A(a: firstTask, b: secondTask)
A(a: {
print("첫 번째 작업 실행")
}) {
print("두 번째 작업 실행")
}
var count = 0
let increment = {
count += 1
}
increment()
print(count) // 출력: 1