func add(x: Int, y: Int) -> Int {
return(x+y)
}
print(add(x: 3, y: 5))
let add1 = { (x:Int, y:Int)-> Int in
return x+y
}
add1의 자료형
앱을 개발하면서 가장 많이 볼 에러중 하나입니다 불필요하다는 의미에요
#후행 클로저(trailing closure)
- 클로저가 함수의 마지막 argument라면 마지막 매개변수명을 생략한 후 함수 소괄호 외부에 클로저를 작성
후행 클로저를 많이 사용하는 순서 3가지
1. UIView.animate (애니메이션 관련 함수)
- 후행 클로저 스타일을 가장 많이 사용하는 함수 중 하나는 애니메이션 관련 함수입니다. UIView.animate는 애니메이션 블록을 클로저로 받아 실행하는 함수입니다.
UIView.animate(withDuration: 1.0) { self.view.alpha = 0.0 }
- UIView.animate(withDuration:) 함수에서 애니메이션 블록은 마지막 매개변수이므로 후행 클로저 스타일로 클로저를 전달할 수 있습니다.
- animate 함수는 애니메이션의 지속 시간, 시작 상태, 끝 상태를 설정하는 데 사용됩니다.
2. DispatchQueue.async (비동기 작업 처리)
- 비동기 처리에서 클로저는 매우 자주 사용됩니다. DispatchQueue의 async 메서드는 주어진 클로저를 비동기적으로 실행합니다.
DispatchQueue.main.async { print("UI 업데이트") }
- DispatchQueue.main.async는 메인 스레드에서 클로저를 비동기적으로 실행하는 함수입니다. UI 업데이트나 화면 갱신을 위해 자주 사용됩니다.
3. TableView와 CollectionView의 reloadData
- UITableView나 UICollectionView의 데이터 업데이트에서 후행 클로저를 자주 사용합니다.
예를 들어, UITableView에서 셀을 동적으로 추가하는 경우에는 클로저를 사용할 수 있습니다.
tableView.performBatchUpdates({ // 데이터 추가/삭제를 위한 업데이트
self.tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic) }, completion: nil)
- performBatchUpdates는 테이블 뷰의 데이터를 추가하거나 삭제할 때 사용되며, 클로저를 후행 클로저 스타일로 전달할 수 있습니다.
// 1. 일반적인 함수 정의 (add 함수)
func add(x: Int, y: Int) -> Int {
return (x + y) // x와 y를 더한 값을 반환
}
print(add(x: 3, y: 5)) // add 함수 호출, 3과 5를 더함 => 8 출력
// 2. add 함수의 타입 출력
print(type(of: add)) // add 함수의 타입을 출력, 결과는 (Int, Int) -> Int
// 3. 클로저를 사용하여 add1 변수에 저장
let add1 = { (x: Int, y: Int) -> Int in
return x + y // 두 인자의 합을 반환하는 클로저
}
print(add1(2, 3)) // add1 클로저 호출, 2와 3을 더함 => 5 출력
// 4. add1 클로저의 타입 출력
print(type(of: add1)) // add1 클로저의 타입을 출력, 결과는 (Int, Int) -> Int
// 5. 함수(math)의 정의 (다른 함수나 클로저를 매개변수로 받는 함수)
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y) // cal 클로저(혹은 함수)를 사용하여 x와 y를 전달하고 결과 반환
}
print(math(x: 1, y: 2, cal: add1)) // math 함수 호출, add1 클로저를 전달 => 1과 2를 더함 => 3 출력
// 6. 클로저를 inline으로 전달하는 예제
var a = math(x: 10, y: 20, cal: { (x: Int, y: Int) -> Int in
return x + y // 두 숫자의 합을 반환하는 클로저
})
print(a) // math 함수 호출, 클로저가 전달됨 => 10과 20을 더함 => 30 출력
// 7. 후행 클로저(trailing closure) 스타일
a = math(x: 100, y: 200) { (x: Int, y: Int) -> Int in
return x + y // 두 숫자의 합을 반환하는 클로저
} // 후행 클로저 문법: 함수 호출 괄호 밖에서 클로저를 전달
print(a) // math 함수 호출, 후행 클로저가 전달됨 => 100과 200을 더함 => 300 출력