如何在Moya中传递URLRequest

时间:2018-02-27 14:10:19

标签: ios swift moya

在我的应用程序中,我使用Moya发出Api请求。在这里,我有URLRequest,但我不知道如何在MoyaProvider中传递它。

Alamofire Ex:

Alamofire.request(urlRequest)

与Same相同,我需要使用Moya而不是使用TargetApi来实现。

2 个答案:

答案 0 :(得分:0)

Moya正在研究Alamofire并隐藏它的实现。所以没有任何理由在你的情况下使用Moya。如果需要,你可以自己使用Alamofire。

将URLRequest传递给Moya是没有正确的方法。唯一的方法是下载源代码并自己添加所需的功能

答案 1 :(得分:0)

查看以下文章后

Writing Network Layer with Moya for Swift

我可以说下面的代码应该适合你。

import Foundation
import Moya

enum MyServerAPI {
    case cameras
    case settingsFor(cameraId: String)

    // MARK: - User
    case createUser(email: String, password: String)
}

// 2:
extension MyServerAPI: TargetType {

    // 3:
    var baseURL: URL { return URL(string: "https://testing.myserver.com/api/v1")! }

    // 4:
    var path: String {
        switch self {
        case .cameras:
            return "/cameras"
        case .settingsFor(let cameraId):
            return "/cameras/\(cameraId)/settings"
        case .createUser:
            return "/user"
        }
    }

    // 5:
    var method: Moya.Method {
        switch self {
        case .createUsr:
            return .post
        default:
            return .get
        }
    }

    // 6:
    var parameters: [String: Any]? {
        switch self {
        case .createUser(let email, let password):
            var parameters = [String: Any]()
            parameters["email"] = email
            parameters["password"] = password
            return parameters
        default:
            return nil
        }
    }

    // 7:
    var parameterEncoding: ParameterEncoding {
        return JSONEncoding.default
    }

    // 8:
    var sampleData: Data {
        return Data()
    }

    // 9:
    var task: Task {
        return .request
    }
}


let provider = MoyaProvider<MyServerAPI>()
provider.request(.cameras) { (result) in
    switch result {
        case .success(let response):
            // do something with resoinse
        case .failure(let error):
            // show error
    }
}