如何在 Moya 中传递 URLRequest

Posted

技术标签:

【中文标题】如何在 Moya 中传递 URLRequest【英文标题】:How to Pass the URLRequest in Moya 【发布时间】:2018-02-27 14:10:19 【问题描述】:

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

Alamofire 例如:

Alamofire.request(urlRequest)

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

【问题讨论】:

你打算用 moya 进行更明确的调用还是只是简单的事情 检查以下答案但您可能需要根据您的 url 和请求类型进行一些更改 即使 Moya 建立在 Alamofire 之上,你仍然不应该直接使用 Alamofire api。 @HarshalBhavsar 给了你一个正确的答案。 @StasBaranovskiy 感谢您的关注。 【参考方案1】:

看完下面的文章

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
    

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何在 Moya 中传递 URLRequest的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AS3 中正确将 URL 传递给 UrlRequest?

如何使用 Moya 在 Swift 中上传图片?

如何从 Moya 框架中禁用 Moya_Logger

如何在 Moya 中添加参数?

如何提取在 Moya 中失败的请求的 url

如何在 moya swift 中添加进度视图?