Swift moya - 学习笔记

Swift moya - 学习笔记,第1张

概述本文主要是练习Moya的熟练使用 简单的网络请求 1.创建baseTargetType 主要是添加了baseUrl省去了每次创建接口都要写的步骤 extension TargetType { public var baseURL: URL { return URL(string: "https://api.github.com/")! }} 2.创建接口 enum 本文主要是练习Moya的熟练使用 简单的网络请求 1.创建basetargettype

主要是添加了baseUrl省去了每次创建接口都要写的步骤

extension targettype {    public var baseURL: URL {        return URL(string: "https://API.github.com/")!    }}
2.创建接口
enum Github {    case repositorIEs(q: String,sort: String)}
3.拓展接口
extension Github: targettype {    var path: String {        switch self {        case .repositorIEs:            return "search/repositorIEs"        }    }    var method: Moya.Method {        switch self {        case .repositorIEs:            return .get        }    }    var parameters: [String: Any]? {        switch self {        case .repositorIEs(let q,let sort):            return ["q": q,"sort": sort]        }    }    var parameterEnCoding: ParameterEnCoding {        return URLEnCoding.default    }    var task: Task {        return .request    }    var sampleData: Data {        switch self {        case .repositorIEs:            return "".utf8Encoded        }    }}extension String {    var urlEscaped: String {        return self.addingPercentEnCoding(withAllowedCharacters: .urlHostAllowed)!    }    var utf8Encoded: Data {        return self.data(using: .utf8)!    }}
参数说明 path 就是API的地址了(该demo完整的URL是https://api.github.com/search/repositories?q=javascript&sort=stars) method 请求的方式:get/post parameters API参数,以Map形式提交 parameterEnCoding 参数的格式 task 该条请API求的方式,request、upload、download sampleData 这个是做单元测试模拟的数据,必须要实现,只在单元测试文件中有作用 4.创建一个ProvIDer
let GithubRxProvicer = RxMoyaProvIDer<Github>(plugins: [NetworkLoggerPlugin(verbose: true,responseDataFormatter: JsONResponseDataFormatter),networkActivityPlugin])private func JsONResponseDataFormatter(_ data: Data) -> Data {    do {        let dataAsJsON = try JsONSerialization.JsonObject(with: data)        let prettyData = try JsONSerialization.data(withJsONObject: dataAsJsON,options: .prettyPrinted)        return prettyData    } catch {        return data //fallback to original data if it cant be serialized    }}let networkActivityPlugin = NetworkActivityPlugin { (change) -> () in    switch(change) {    case .ended:        UIApplication.shared.isNetworkActivityIndicatorVisible = false    case .began:        UIApplication.shared.isNetworkActivityIndicatorVisible = true    }}
补充

Moya在初始化ProvIDer的时候可以传入一些插件,Moya库中默认有4个插件。

AccesstokenPlugin 管理Accesstoken的插件 CredentialsPlugin 管理认证的插件 NetworkActivityPlugin 管理网络状态的插件 NetworkLoggerPlugin 管理网络log的插件

且,自己也可以创建plugin;比如:

class RequestAlertPlugin: PluginType { private let vIEwController: UIVIEwController init(vIEwController: UIVIEwController) { self.vIEwController = vIEwController } func willSend(request: RequestType,target: targettype) { //do your things } func dIDReceive(result: Result<Response,MoyaError>,target: targettype) { guard case Result.failure(_) = result else { return }//只监听失败 // do your things } }
5.使用
GithubRxProvicer.request(.repositorIEs(q: "JavaScript",sort: "stars"))            .mapResponsetoObject(type: RepositorIE.self)            .subscribe { event in                switch event {                case .next(let data):                    print(".next")                case .error(let error):                    print(error)                case .completed:                    print(".completed")                }            }            .disposed(by: disposeBag)
补充

Moya也为我们提供了很多Observable的扩展,让我们能更轻松的处理MoyaResponse,常用的如下:

filter(statusCodes:) 过滤response状态码 filterSuccessfulStatusCodes() 过滤状态码为请求成功的 mapJsON() 将请求response转化为JsON格式 mapString() 将请求response转化为String格式 更多使用参考

可以参考这篇文章,里面很详细的介绍了moya的各种用法

总结

以上是内存溢出为你收集整理的Swift moya - 学习笔记全部内容,希望文章能够帮你解决Swift moya - 学习笔记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1059361.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存