Swift에서의 completion

2024. 11. 26. 23:52·App Development/Swift

Swift에서 completion은 주로 비동기 작업을 처리할 때 사용되는 클로저를 의미합니다. 비동기 작업이 완료된 후 특정 작업을 수행하기 위해 호출되는 코드를 포함하는 매개변수입니다.

 

Completion의 목적

Completion은 작업이 완료된 시점에 결과를 처리하거나 후속 작업을 실행하도록 설계되었습니다. 예를 들어, 네트워크 요청, 파일 읽기/쓰기, 애니메이션 완료 등 시간이 걸리는 작업에서 사용됩니다.

 

사용 방식

Completion은 함수의 매개변수로 전달되는 클로저 형태입니다. 작업이 끝난 뒤 호출하여 결과를 반환하거나, 작업 완료 후 추가 동작을 실행합니다.

 

 

예시 코드

기본적인 Completion 사용 예시

func fetchData(completion: @escaping (String) -> Void) {
    DispatchQueue.global().async {

        // 데이터 처리 (예: 네트워크 요청)
        let data = "Fetched Data"
        DispatchQueue.main.async {
            completion(data) // 작업 완료 후 클로저 호출
        }
    }
}


// 함수 호출

fetchData { result in
    print("Result: \(result)") // "Result: Fetched Data" 출력
}

Optional Completion 사용 예시

Completion을 선택적으로 사용할 수도 있습니다.

func performTask(completion: ((Bool) -> Void)?) {
    let success = true

    // 작업 완료 후 호출 (completion이 nil이 아니면 실행)
    completion?(success)
}


// 호출 시 completion 전달

performTask { isSuccess in
    if isSuccess {
        print("Task completed successfully!")
    }
}

 

@escaping 키워드

• @escaping 키워드는 클로저가 함수의 실행이 끝난 뒤에도 사용될 수 있음을 명시합니다. 예를 들어, 비동기 작업에서 completion은 함수가 리턴된 뒤 호출되므로 @escaping이 필요합니다.

• @escaping이 없는 경우: 클로저가 함수 내부에서만 사용되며 함수가 반환되기 전에 호출됩니다.

 

Completion의 활용

• 네트워크 요청: 서버로부터 데이터를 가져온 후 UI를 업데이트.

• 애니메이션: 애니메이션 완료 후 다른 동작 실행.

• 데이터 처리: 비동기 작업이 끝난 뒤 결과를 전달.

 

Completion의 장점

• 작업이 끝난 뒤 명확하게 후속 작업을 수행할 수 있습니다.

• 코드가 더 모듈화되고 유지 관리가 쉬워집니다.

• 비동기 작업의 흐름을 관리하기 용이합니다.

 

Completion을 사용하면 코드의 비동기 특성을 효율적으로 처리할 수 있습니다. 이는 Swift에서 비동기 프로그래밍의 중요한 기법 중 하나입니다.

 
 
저작자표시 비영리 동일조건 (새창열림)

'App Development > Swift' 카테고리의 다른 글

Swift에서 동기와 비동기의 차이  (0) 2024.11.30
Swift의 매개변수(parameter) 정리하기  (0) 2024.11.30
Swift의 Closure 란?  (0) 2024.11.25
Swift의 ARC (Automatic Reference Counting)  (0) 2024.11.24
Swift에서의 Class  (0) 2024.11.24
'App Development/Swift' 카테고리의 다른 글
  • Swift에서 동기와 비동기의 차이
  • Swift의 매개변수(parameter) 정리하기
  • Swift의 Closure 란?
  • Swift의 ARC (Automatic Reference Counting)
Genie Choi 지니 초이
Genie Choi 지니 초이
  • Genie Choi 지니 초이
    Genie World
    Genie Choi 지니 초이
  • 전체
    오늘
    어제
    • 분류 전체보기 (27)
      • Genie (3)
      • Projects (6)
      • Up-to-date learning (0)
      • App Development (10)
        • React Native (1)
        • Swift (9)
      • Marketing Tool (1)
        • Mobile Measurement Platform (1)
        • CRM Marketing (0)
      • Linux (5)
      • AWS (2)
        • EC2 (1)
        • Route 53 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Genie Choi 지니 초이
Swift에서의 completion
상단으로

티스토리툴바