-
iOS) @escaping 활용Programing Language/iOS(Swift) 2021. 3. 12. 12:42728x90반응형
개발을 하다보면 네트워크 코드를 ViewController에 함께 쓰다보면 코드 길이가 비약적으로 늘어나는 걸 느낀다.
이것을 분리 시켜야겠다고 느끼고 시도한 것은 첫번째 방법이다.
1. 클래스로 네트워크 코드를 분리 시키고 각 ViewConroller로 클래스에서 네트워크 클래스를 객체화 시킨후 함수 단위로 불러온다.
단 함수에 return 값을 하나만 불러 올수 있기에 각 함수별로 delegate를 사용하여 여러개의 return 값을 가져왔다.
- 이렇게 함으로써 1차적으로 ViewConroller와 네트워크 클래스는 분리되었지만 지금 @escaping 이라는 방법을 알게 된뒤 1번과 같은 방식은 너무 코드가 파편화되어 가독성이 떨어진다.
2. @escaping 문법을 사용한다.
예)
- 네트워크 클래스
public func appLogin(student_id: String, student_password : String, url : String, _ completion : @escaping(String?, String?) -> Void){
//...네트워크 코드
completion(result, result2)
}
- ViewController 클래스
let AF = AFClass()
AF.appLogin(student_id: id, student_password: pw, url: "app/login", {result, result2 in
print(result,result2)
})
이렇게하면 비동기화 되어있는 함수에 delegate를 또 사용하여 비동기가 끝났을때 콜백해줄 필요도없고
해당 함수하나면 비동기 코드 이후에 escaping을 통해 값을 불러와서 그값을 처리해주면된다.
참고자료
hcn1519.github.io/articles/2017-09/swift_escaping_closure
728x90반응형'Programing Language > iOS(Swift)' 카테고리의 다른 글
iOS) Rxswift를 textfield에 적용해보기(참고자료) (0) 2021.03.16 iOS) protocal 사용하지 않고 RxSwift로 ViewController간 데이터 주고 받기 (2) 2021.03.16 iOS) Push Message 기능 추가하기(참고자료) (0) 2021.03.10 iOS) ViewController Life cycle (참고자료) (0) 2021.02.25 iOS) ERROR ITMS-90035 에러(해결 참고자료) (3) 2021.02.18