简体   繁体   English

如何在Moya中传递URLRequest

[英]How to Pass the URLRequest in Moya

In my Application, I'm using Moya to make the Api request. 在我的应用程序中,我使用Moya发出Api请求。 Here, I'm having URLRequest but I don't know how to pass it in MoyaProvider. 在这里,我有URLRequest,但是我不知道如何在MoyaProvider中传递它。

Alamofire Ex: Alamofire前:

Alamofire.request(urlRequest)

Like the Same, I need to implement using Moya instead of using TargetApi. 像Same一样,我需要使用Moya而不是TargetApi来实现。

Moya is working on Alamofire and hidden it realization. Moya正在研究Alamofire并隐藏了它的实现。 So the is no any reason to use Moya in your case. 因此,没有理由在您的情况下使用Moya。 You can just use Alamofire by it-self if you need it. 如果需要,您可以自行使用Alamofire。

The is no correct way to pass URLRequest to Moya . 这不是将URLRequest传递给Moya正确方法。 Only way is to download source code and add needed functionality by yourself 唯一的方法是自行下载源代码并添加所需的功能

After looking into the following article 看完下面的文章

Writing Network Layer with Moya for Swift 使用Moya为Swift编写网络层

I can say following code should work for you. 我可以说以下代码适合您。

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
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM