Mac Plus

Hello Swift

Moya 사용하기

기존에 사용하던 Alamofire에서 Moya로 변경을 진행해보았다.

기존방식
Alamofire.request(url주소, method: .post, parameters: parameters)
        .responseJSON { response in
                switch response.result {
                case .success(let json):
                       print("success")
                case .failure(let error):
                       print("fail")
                }
        }
func getShopInfo() {
        let provider = MoyaProvider<DispathData>()
        let authParams = ["****_id": "***",
                          "****": "***"]
        provider.request(.userInfo(authParams)) { (result) in
            switch result {
            case .success(let response):
                if let jsonData = try? JSONDecoder().decode(ShopInfo.self, from: response.data) {
                    //데이터 저장 & 화면 이동  
                }
            case .failure(let error):
                print(error)
            }
        }
    }
import Moya


enum DispathData {
    case userInfo(_ data: [String :String])
}

extension DispathData: TargetType {
    var baseURL: URL {
        // baseURL은 API Endpoint를 의미한다.
        switch self {
        case .userInfo:
            return URL(string: "API 주소")!
        default:
            return URL(string: "API 주소")!
        }
        
    }
    
    var path: String {
        // path는 API 메서드를 정한다.
        switch self { 
        case .userInfo:
            return "/  url뒤에 붙은 주소"
    }
    
    var method: Moya.Method {
        // 각 enum case마다 method를 정해 줄 수 있다.
        switch self {
        case .users :
            return .get
        default:
            return .post
        }
        
    }
    
    var sampleData: Data {
        return Data()
    }
    
    var task: Task {               
        switch self {
        case .userInfo(let data):
            return .requestParameters(
                parameters: data,
                encoding: URLEncoding.default
            )
        default:
            return .requestPlain
        }
    }
    
    var headers: [String : String]? {
        // 리퀘스트 헤더를 정할 수 있다.
        // 여기서는 쓰이지 않아서 빈값으로 넣었다.
        return nil
    }
}

  • 이렇게 하고나서 돌리면 해당 오류를 방출한다. App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file. (해당 url이 http:// 로 시작되면 차단시킨다.)

—-> 그렇다면 해당 target의 Info.plist로 가서 App Transport Security Settings -> Allow Arbitray Loads 를 YES로 해준다.