-
swift - escaping closure, result typeswift 2021. 6. 3. 20:15
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 에 해당하는 분기처리를 한다.
* 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를 바인딩 하여 사용한다
[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