0

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

阿拉莫菲尔前:

Alamofire.request(urlRequest)

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

4

2 回答 2

1

看完下面的文章

使用 Moya 为 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
    }
}
于 2018-02-27T14:38:44.367 回答
0

Moya正在研究Alamofire并隐藏它的实现。因此,在您的情况下没有任何理由使用 Moya。如果需要,您可以单独使用 Alamofire。

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

于 2018-02-27T14:21:53.223 回答