카테고리 없음

iOS 기초 프로그래밍 15주차

sw0913 2024. 12. 11. 15:33

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 출력