澳门在线威尼斯官方 > 澳门在线威尼斯官方 > Swift网络请求

原标题:Swift网络请求

浏览次数:154 时间:2019-10-06

  在使用Alamofire进展网络央浼的时候,相信当先二分之一的校友都会卷入八个虚幻的NetworkLayer,如"APIManager" 只怕"NetworkModel"等等。可是地方业务职能扩张,会日渐混合种种央浼,非常不足清晰,而Moya能很好地消除那类难题。Moya在Alamofire基础上进展打包,是一个允许中度自定义的网络层,能够依赖具体的急需开展接口的设置。具体的介绍能够参见Moya的官方链接,结构图如下:

图片 1

 

  接下去就介绍一下Moya的有的普及的用法:

(一)根据职业需要创制具体央求:

  打譬最近后大家需求书写账户的相干接口,如Login、userInfo。那么首先大家得创造AccountService:

enum AccountService {
    case login(phoneNum: NSInteger,passWord: NSInteger)
    case logout
}

  然后让AccountService达成TargetType左券,定义须要必要的着力新闻:

extension AccountService: TargetType {
    var baseURL: URL {
        return URL(string: ServiceBaseURL)!
    }

    var path: String {
        switch self {
        case .login(_, _):
            return "accountService/login"
        case .logout:
            return "accountService/logout"
        }
    }

    var method: Moya.Method {
        switch self {
        case .login(_, _):
            return .post
        case .logout:
            return .get
        }
    }

    var parameters: [String: Any]? {
        switch self {
        case .login(let phoneNum, let passWord):
            return ["phoneNum": phoneNum, "passWord": passWord]
        case .logout:
            return nil
        }
    }

    var parameterEncoding: ParameterEncoding {
        return JSONEncoding.default // Send parameters as JSON in request body
    }

    var sampleData: Data {
        return "".data(using: .utf8)!
    }

    var task: Task {
        return .request
    }

}

  如上大家就曾经实现了互联网诉求所急需的一个endpoint。接着通过Moya提供一个出殡和埋葬央浼的Provider就完成了基本的使用:

let provider = MoyaProvider<AccountService>()

provider.request(.login(phoneNum: 12345678901, passWord: 123456)) { result in

            switch result {
            case let .success(response):
                //...............
                break
            case let .failure(error):
                //...............
                break
            }
        }

(二)通过HTTPHeader设置公共必要参数

  在骨子里花费中大家兴许会供给在伸手头内增多一些公共央浼参数,如用于识别部分平台标记、辨别接口的版本号。你能够定义一个Endpoint的闭包,

let publicParamEndpointClosure = { (target: AccountService) -> Endpoint<AccountService> in
            let url = target.baseURL.appendingPathComponent(target.path).absoluteString
            let endpoint = Endpoint<AccountService>(url: url, sampleResponseClosure: { .networkResponse(200, target.sampleData) }, method: target.method, parameters: target.parameters, parameterEncoding: target.parameterEncoding)
            return endpoint.adding(newHTTPHeaderFields: ["x-platform" : "iOS", "x-interface-version" : "1.0"])
        }

  然后在创制诉求的Provider把它添加上去,

let provider = MoyaProvider(endpointClosure: publicParamEndpointClosure)

(三)通过插件的秘籍术监督听互连网状态

  日常我们会在进展网络必要的时候进行部分动静体现,如loading,那么您能够经过插件的方法来落到实处。Moya暗中认可有4个插件:

  • AccessTokenPlugin 管理AccessToken的插件
  • CredentialsPlugin 管理认证的插件
  • NetworkActivityPlugin 管理互联网状态的插件
  • NetworkLoggerPlugin 管理互连网log的插件

  在此间就演示一下NetworkActivityPlugin的采纳:

let networkPlugin = NetworkActivityPlugin { (type) in
            switch type {
            case .began:
                NSLog("显示loading")
            case .ended:
                NSLog("隐藏loading")
            }
        }

  一样在创制央求的Provider把它添加上去即可

let provider = MoyaProvider<AccountService>(plugins: [networkPlugin])

  当然你也足以自定义一些功力的插件,只须求达成PluginType契约,具体职能达成可参看Moya暗中认可的插件:

final class CustomPlugin: PluginType {

    // MARK: Plugin

}

(四)设置接口的晚点时间

  通常网络的乞求要求依赖现实的职业接口设置合适的晚点时间,你能够参见一下措施开展设置,

let requestTimeoutClosure = { (endpoint: Endpoint<AccountService>, done: @escaping MoyaProvider<AccountService>.RequestResultClosure) in

            guard var request = endpoint.urlRequest else { return }

            request.timeoutInterval = 30    //设置请求超时时间
            done(.success(request))
        }

  同样在创造恳求的Provider把它添加上去即可

let provider = MoyaProvider<AccountService>(requestClosure: requestTimeoutClosure)

  至此,使用Moya举办网络央浼的主旨用法已经介绍完了,首借使记录一下只是药铺,当然也愿意能对大家不怎么用处,多谢!

材质参照他事他说加以考察:

 

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:Swift网络请求

关键词:

上一篇:没有了

下一篇:学学笔记