ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift - escaping closure, result type
    swift 2021. 6. 3. 20:15

    0519_unsplash / MyAlamofireManager - getPhotos(searchTerm:completion:)

    1. getPhotos()는 searchTerm과 completion 매개변수를 받는다

     

    2. searchTerm으로 사진을 검색한다.

     

    3. 사진을 검색한 결과의 count에 따라

    클로저 completion 에게

    Result<[Photo], MyError> 를 전달한다.

     

    3-1. 성공 시 Result case .sucess 와 photos: [Photo] 를 completion 클로저에게 전달한다.

    (함수가 끝난 후 실행될 클로저에선 .success 에 해당하는 분기처리를 한다. )

     

    3-2. 실패 시 Result case .failure 와 noContent: MyError 를 completion 클로저에게 전달

    (함수가 끝난 후 실행될 클로저에선 .failure 에 해당하는 분기처리를 한다.

     

    MyError
    getPhotos(searchTerm:completion:) 호출과 completion 이 받은 매개변수 result: Result<[Photo], MyError> 의 분기처리

     

    * Escaping Closure

    - 클로저의 매개변수 타입 앞에 @escaping 을 작성한 클로저이다.

    - 해당 클로저를 함수 외부에서 사용할 수 있게끔 한다.

    - 해당 클로저는 함수의 작업이 완료된 후 외부에서 호출되며 이를 보장한다.

     

    * Result 타입

    - Result 타입은 실패 가능한 작업의 처리를 위한 타입이다. ex) do, try, catch, throw 등의 문법처럼.

    -  enum 열거형으로, case success, case failure 둘로 나눠 에러 처리를 한다.

     

    * [weak self]  in 

    - escaping 클로저 내부에서 self 를 사용하기 위해 사용했다.

    - strong reference cycle 로 인한 메모리 누수를 방지하기 위해 사용한다.

    (클로저 또한 참조 타입인데, self.속성을 참조하며 strong reference 가 양방향으로 생기며 cycle 발생 )

    (클로저가 강한 순환 참조를 발생시킬 상황이 별도로 있고, 아래 flowchart를 참고하면 좋다)

    - [weak self] 는 self옵셔널로 만들기 때문에 아래와 같이 사용해야 한다.

    - 사용법

    옵셔널 체이닝 ex) self?.resultCount 

    또는 사진과 같이 guard let을 통해 self를 바인딩 하여 사용한다

     

     

    https://medium.com/flawless-app-stories/you-dont-always-need-weak-self-a778bec505ef

    [weak self] 사용 flowchart

     

    'swift' 카테고리의 다른 글

    Swift - UserDefaults extension 활용 편하게 사용하기  (0) 2022.10.14
    UIView - touch 관련 메소드, 멀티 터치  (2) 2021.07.13
    swift style guide - Naming  (0) 2021.06.20
    로그 출력  (0) 2021.06.01
    swift - backslash dot \.  (0) 2021.05.11

    댓글

Designed by Tistory.