美文网首页
Swift4 Moya 解释说明

Swift4 Moya 解释说明

作者: 巴糖 | 来源:发表于2018-01-04 11:46 被阅读199次
import Foundation
import Moya

enum BJNetworkTool {
    case zen
    case showUser(id: Int)
    case createUser(firstName: String, lastName: String)
    case updateUser(id: Int, firstName: String, lastName: String)
    case showAccounts
    case uploadData(firstName: String, file: Data)
}

extension BJNetworkTool: TargetType {
    
    /// The target's base `URL`.
    /// baseURL 统一基本的URL
    var baseURL: URL {
        return URL(string: "https://api.myservice.com")!
    }
    
    /// The path to be appended to `baseURL` to form the full `URL`.
    /// path字段会追加至baseURL后面
    var path: String {
        switch self {
        case .zen:
            return "/zen"
        case .showUser(let id), .updateUser(let id, _, _):
            return "/users/\(id)"
        case .createUser(_, _):
            return "/users"
        case .showAccounts:
            return "/accounts"
        case .uploadData:
            return "/upload"
        }
    }
    
    /// The HTTP method used in the request.
    /// HTTP的请求方式
    var method: Moya.Method {
        switch self {
        case .zen, .showUser, .showAccounts:
            return .get
        case .createUser, .updateUser:
            return .post
        case .uploadData:
            return .post
        }
    }
    
    /// The type of HTTP task to be performed.
    /// 将要被执行的任务(请求:request 下载:upload 上传:download)
    var task: Task {
        switch self {
        case .zen, .showUser, .showAccounts:
            // Send no parameters
            return .requestPlain
        case let .updateUser(_, firstName, lastName):
            // Always sends parameters in URL, regardless of which HTTP method is used
            return .requestParameters(parameters: ["first_name": firstName, "last_name": lastName], encoding: URLEncoding.queryString)
        case let .createUser(firstName, lastName):
            // Always send parameters as JSON in request body
            return .requestParameters(parameters: ["first_name": firstName, "last_name": lastName], encoding: JSONEncoding.default)
        case let .uploadData(firstName: String, file: Data)
            let m1 = MultipartFormData(provider: MultipartFormData.FormDataProvider.data(dataImage!), name: "file" ,fileName: "file.png" , mimeType: "image/png")
            let strData1 = firstName.data(using: .utf8)
            let m2 = MultipartFormData(provider: MultipartFormData.FormDataProvider.data(strData1!), name: BJRequestKeyModel)
            return .uploadMultipart([m1, m2])
        }
    }
    
    /// Provides stub data for use in testing.
    /// 这里用于单元测试,不需要的就像我一样随便写写
    var sampleData: Data {
        switch self {
        case .zen:
            return "Half measures are as bad as nothing at all.".utf8Encoded
        case .showUser(let id):
            return "{\"id\": \(id), \"first_name\": \"Harry\", \"last_name\": \"Potter\"}".utf8Encoded
        case .createUser(let firstName, let lastName):
            return "{\"id\": 100, \"first_name\": \"\(firstName)\", \"last_name\": \"\(lastName)\"}".utf8Encoded
        case .updateUser(let id, let firstName, let lastName):
            return "{\"id\": \(id), \"first_name\": \"\(firstName)\", \"last_name\": \"\(lastName)\"}".utf8Encoded
        case .showAccounts:
            // Provided you have a file named accounts.json in your bundle.
            guard let url = Bundle.main.url(forResource: "accounts", withExtension: "json"),
                let data = try? Data(contentsOf: url) else {
                    return Data()
            }
            return data
        }
    }
    
    var headers: [String: String]? {
        return ["Content-type": "application/json"]
    }
    
}

// MARK: - Helpers
private extension String {
    var urlEscaped: String {
        return addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
    }
    
    var utf8Encoded: Data {
        return data(using: .utf8)!
    }
}

        let provider = MoyaProvider<BJNetworkTool>().request(.recommend(page: 1, pagesize: 8) { result in
        switch result {
        case let .success(moyaResponse):
            do {
                let data = try moyaResponse.mapJSON()
                print("data\(data)")
            }
            catch {
                // show an error to your user
            }
            let statusCode = moyaResponse.statusCode

            print("statusCode\(statusCode)")
        // do something with the response data or statusCode
        case let .failure(error): break
            // this means there was a network failure - either the request
            // wasn't sent (connectivity), or no response was received (server
            // timed out).  If the server responds with a 4xx or 5xx error, that
            // will be sent as a ".success"-ful response.
        }

相关文章

  • Swift4 Moya 解释说明

  • Moya进阶说明

    Moya作为Swift中很受欢迎的一款网络框架,它的基础使用方法在网上可以找到很多教程,这里就不再赘述,今天主要想...

  • swift4,网络请求工具Moya

    在OC中,我们使用AFNetworking来进行网络请求,简洁方便。在swift中,我们使用Moya来进行网络请求...

  • Swift 网络请求 : Moya使用理解

    Github : Moya Moya版本 : 11.0.2Swift版本 : 4.1 Moya入口 这个是Moya...

  • Network 使用说明

    Network 使用说明 一、准备工作 1. 相关知识 Moya RxSwift Alamofire Promis...

  • swift moya和ObjectMapper

    Moya 使用moya主要是因为网上说这是一个比较推荐的swift开源项目,当一开始学习时看见使用说明就有点扭头要...

  • Moya使用

    关于Moya的官方可参考:点击查看[https://github.com/Moya/Moya] Moya官方使用下...

  • 解释说明

    尊敬的各位领导: 首先我先自我介绍一下,我是2018年入职的特岗老师李丹,最近因为李献超去文教局控诉我...

  • 说明~解释

    在心理咨询的过程中,经常会遇到这样的事情,求助者三番五次的说出,他要自杀,甚至告诉咨询师说,她在某月某日要自杀。遇...

  • Swift常用第三方库

    Networking: 1. Moya[https://github.com/Moya/Moya] 2. Alam...

网友评论

      本文标题:Swift4 Moya 解释说明

      本文链接:https://www.haomeiwen.com/subject/iqcrnxtx.html