Alamofire 적용부터 Utils 제작까지


objective-C 때는 AFNetwork를 거의 썼는데.. 스위프트에서는 Alamofire가 답인 것 같아서 테스트 적용을 해보았습니다.


cocoapods이나 git clone을 이용해 일단 프로젝트를 다운받습니다. 적용법은 아래 사이트 참조.





적용 후 Alamofire.xcodeproj를 사용할 프로젝트에 로드 후 dependency까지 설정하면 사용 준비 끝.




AlamofireUtils.swift


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import Alamofire
 
struct AlamofireUtils {
    
    let tag: String
    let url: String
    let method: HTTPMethod
    let parameters: Parameters
    
    init(tag: String, path: String, method: HTTPMethod = .get, parameters: Parameters = [:]) {
        self.tag = tag
        url = path
        self.method = method
        self.parameters = parameters
    }
    
//    func request(success: @escaping(_ data: String)-> Void, fail: @escaping (_ error: Error?)-> Void) {
//        Alamofire.request(url, method: method, parameters: parameters).responseJSON { response in
//            if response.result.isSuccess {
//                success(String(data: response.result.value as! Data, encoding: .utf8)!)
//            } else {
//                fail(response.result.error)
//            }
//        }
//    }
    
    func requestString(success: @escaping(_ tag: String, _ data: String?)-> Void, fail: @escaping (_ tag: String, _ error: Error?)-> Void) {
        Alamofire.request(url, method: method, parameters: parameters).responseString { response in
            if response.result.isSuccess {
                success(self.tag, response.result.value)
            } else {
                fail(self.tag, response.result.error)
            }
        }
    }
    
    
}
 
cs


String을 수신하는 방식으로 일단 하나 만들어보았다. 여러 코드를 참조했고


tag형태로 리턴되는 방식을 좋아해서 위와 같이 변경하였다.




viewController.swift


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
override func initData ()
    {
        reloadFavoriteItemData ();
        
        let tag1 = AlamofireUtils(tag: "TAG1", path: "https://httpbin.org/get")
        tag1.requestString(success: AlamofireResponseSuccess, fail: AlamofireResponseFailed)
        
        let tag2 = AlamofireUtils(tag: "TAG2", path: "https://insomnia.rest/")
        tag2.requestString(success: AlamofireResponseSuccess, fail: AlamofireResponseFailed)
 
    }
    
    func AlamofireResponseSuccess (tag : String, data : String?)
    {
        NSLog("===== ViewController_item AlamofireResponseSuccess tag : %@ / data : %@", tag, data ?? "(NULL))");
    }
    
    func AlamofireResponseFailed (tag : String, data : Error?)
    {
        NSLog("===== ViewController_item AlamofireResponseFailed tag : %@", tag);
    }
cs


tag와 url을 입력한 상태로 인스턴스 생성 후 request.


성공과 실패에 대한 메소드는 하나로 관리하는걸 좋아해서 택한 방법이다.


이대로 한 번 실전에 적용해보면서 수정할 내역은 수정하고 해야될 듯.


조금 더 써보니, 클로저 (Closure) 의 사용법에 대해 조금 더 눈을 뜰 수 있게 되는 듯 싶다.

이 글을 공유하기


댓글(0)

Designed by CMSFactory.NET