Swift 网络请求——Moya的使用

本文介绍了Swift中的网络请求库Moya,它作为Alamofire的抽象层,简化了网络请求的调用。文章详细讲解了Moya的组成部分,包括Provider、Request的配置、简单使用示例以及高级用法,如EndpointClosure、requestClosure、stubClosure、manager和plugins的自定义。通过Moya,开发者可以更加高效地管理和组织网络请求代码。
摘要由CSDN通过智能技术生成

一、简介

github地址

Moya是一个网络抽象层,它在底层将Alamofire进行封装,对外提供更简洁的接口供开发者调用。在Objective-C中,大部分开发者会使用AFNetwork进行网络请求,当业务复杂一些时,会对AFNetwork进行二次封装,编写一个适用于自己项目的网络抽象层。在Objective-C中,有著名的YTKNetwork,它将AFNetworking封装成抽象父类,然后根据每一种不同的网络请求,都编写不同的子类,子类继承父类,来实现请求业务。Moya在项目层次中的地位,有点类似于YTKNetwork。可以看下图对比
在这里插入图片描述

二、模块组成

在这里插入图片描述

  • Provider:provider是一个提供网络请求服务的提供者。通过一些初始化配置之后,在外部可以直接用provider来发起request。
  • Request:在使用Moya进行网络请求时,第一步需要进行配置,来生成一个Request。首先按照官方文档,创建一个枚举,遵守TargetType协议,并实现协议所规定的属性。为什么要创建枚举来遵守协议,枚举结合switch语句,使得API管理起来比较方便。
    根据创建了一个遵守TargetType协议的名为YShareAPI的枚举,我们完成了如下几个变量的设置。
  1. baseURL
  2. path
  3. method
  4. sampleData
  5. task
  6. headers

三、简单使用Demo

引入框架

pod 'Moya', '~> 14.0'

# or 

pod 'Moya/RxSwift', '~> 14.0'

# or

pod 'Moya/ReactiveSwift', '~> 14.0'

YShareApI.swift

//
//  YShareApI.swift
//  
//
//  Created by bruce yao on 2019/4/10.
//  Copyright © 2019 bruce yao. All rights reserved.
//

import UIKit
import Moya
import RxCocoa
import Result
import SwiftyJSON

//初始rovider
let YShareApiProvider = MoyaProvider<YShareAPI>()

/** 请求的endpoints)**/
//请求分类
enum YShareAPI {
   
    case shareNavList:
    case shareList(pageSize: Int, pageNum: Int):
}
//请求配置
extension YShareAPI: TargetType {
   
    //服务器地址
    public var baseURL: URL {
   
        switch self {
   
        default:
            return URL(string: HD_Search_Base)!
        }
    }
    
    //各个请求的具体路径
    public var path: String {
   
        switch self {
   
        case .shareNavList:
            return "manage/navigation/getNavigationList"
        default:
            return "ddddd/list"
        }
    }
    
    //请求类型
    public var method: Moya.Method {
   
        switch self {
   
       
        default:
            return .get
        }
    }
    
    //请求任务事件(这里附带上参数)
    public var task: Task {
   
        switch self {
   
        case .shareNavList:
            return .requestPlain
       case .shareList(let pageSize, let pageNum):
            var params: [String: Any] = [:]
            params["pageSize"] 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值