공부방/iOS

iOS Alamofire Apply (iOS Alamofire 적용)

soycrab 2019. 7. 12. 20:51

요즘 어플리케이션은 대부분 수시로 추가되고 변하는 컨텐츠를 보여주는 

방식이기 때문에 서버와의 통신이 불가피 하다. 

따라서 오늘은 서버와 API 통신을 할수있게끔 도와주는 

Alamofire 라이브러리를 적용해 보겠다.

 

 

1. 설치 

Podfile에

pod 'Alamofire' 를 추가하고 

터미널에서 해당 프로젝트 디렉토리 (Pod파일이 위치한 곳 )Pod install 을 입력해준다 

 

2. 통신전 준비 

- Model 

import Foundation

 

struct BoardList: Codable {

    let idx: Int

    let title: String

    let content:String

}

 

- API Url 및  Param Code

 

enum Result<T> {

    case success(T)

    case error(Error)

}

 

enum ServiceError: Error {

    case parsingError

}

 

struct BoardsAPI {

    static let baseURL = "http://test.com/temp/v1/board/"

    static let param: [String : String] = [BoardsAPI.Parms.token : "xxxxxxxxxxxxxxxx"]

    enum Parms {

        static let token = "token"

    }

}

 

- API 요청 Code 

struct ServiceToGetBoards {

    func getURL(_ str: String) -> URL? {

        let url = URL(string: str)

        return url

    }

    

    func getBoardList(completion: @escaping (Result<BoardList>) -> ()){

        guard let url = getURL(BoardsAPI.baseURL) else {return}

        Alamofire.request(url,

                          method: .get,

                          parameters: BoardsAPI.param,

                          encoding: URLEncoding.default)

            .responseData { (response) in

                switch response.result {

                case .success(let value):

                  do {

                        let list = try JSONDecoder().decode(BoardList.self, from: value)

                        completion(.success(list))

                    } catch {

                        completion(.error(ServiceError.parsingError))

                    }

                case .failure(let error):

                    completion(.error(error))

                }

        }

    }

}

 

-  사용 방법

 

var service: ServiceToGetBoards?

service = ServiceToGetBoards()
service?.getBoardList(completion: { [weak self] (result) in
switch result {
     case .success(let value):
     //do something
     case .error(let err):
     //do something

}
})

 

그냥 간단하게 사용 법을 적어 보았습니다. 

실제로는 좀더 세분화 되고 분리되어 있지만 보기 편하라고, 

코드들을 합쳐 보았습니다. 

그냥 이렇게 사용하는 거구나 라고 알고 계시면 될듯 합니다. 

반응형