Swift网络封装库Moya中文手册之Targets
Targets
使用Moya,我们首先需要定义一个target - 这通常是继承 TargetType 协议的 枚举 变量。接下来,你的app只需要处理这些targets,也就是一些你希望调用API完成的操作。例如:
FavouriteTweet(tweetID: String)。
示例代码:
public enum GitHub {
    case Zen
    case UserProfile(String)
    case UserRepositories(String)
}
Targets必须继承 TargetType。
TargetType 协议要求在枚举中定义一个 baseURL 属性。 注意:baseURL的值不会取决于 self 的值, 而是返回一个固定值(如果你使用多个API base URL,需要使用多个枚举和Moya providers)。这是extension的开头:
extension GitHub: TargetType {
    public var baseURL: NSURL { return NSURL(string: "https://api.github.com")! }
path 可以用来拼接相对路径,例如:
    public var path: String {
        switch self {
        case .Zen:
            return "/zen"
        case .UserProfile(let name):
            return "/users/\(name.URLEscapedString)"
        case .UserRepositories(let name):
            return "/users/\(name.URLEscapedString)/repos"
        }
    }
注意:这里我们使用了一个String的扩展方法 URLEscapedString 。
文章末尾给出了方法的实现。
现在需要给枚举设置 method 。在这个示例中,我们只需要用到GET方法, 这很简单:
    public var method: Moya.Method {
        return .GET
    }
如果你的请求需要POST或者别的方法,可以通过switch self 来返回合适的值。与我们获取 path 属性用到的方法相同。
我们的 TargetType 进展不错,不过还没完成。我们还需要一个 parameters 属性来返回不同的网络请求参数。示例代码:
    public var parameters: [String: AnyObject]? {
        switch self {
        case .UserRepositories(_):
            return ["sort": "pushed"]
        default:
            return nil
        }
    }
不同于之前的 path 属性, 我们这里其实不关心 UserRepositories 传入的参数,所以这里使用 _ 来忽略这个参数。
最后,看看 sampleData 属性。这是 TargetType 协议所必须的。任何你想要调用的target必须提供一些非空的 NSData 类型的返回值。这可以用作后期测试或者为其他开发者提供离线支持。这个属性应该随  self 的变化而改变。
    public var sampleData: NSData {
        switch self {
        case .Zen:
            return "Half measures are as bad as nothing at all.".dataUsingEncoding(NSUTF8StringEncoding)!
        case .UserProfile(let name):
            return "{\"login\": \"\(name)\", \"id\": 100}".dataUsingEncoding(NSUTF8StringEncoding)!
        case .UserRepositories(let name):
            return "[{\"name\": \"Repo Name\"}]".dataUsingEncoding(NSUTF8StringEncoding)!
        }
    }
做完这些,构造 Provider 就很简单了:
let GitHubProvider = MoyaProvider<GitHub>()
Escaping URLs
这是一个扩展的示例,可以简单的将普通字符串"like this" 转换为URL编码字符串"like%20this":
extension String {
    var URLEscapedString: String {
        return self.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet())!
    }
}
转载请注明出处http://www.cnblogs.com/liuliuliu/p/5624026.html,并注明转载。
原文链接
翻译: bibibi_liuliu
联系方式: 395985239@qq.com
Swift网络封装库Moya中文手册之Targets的更多相关文章
- Swift网络封装库Moya中文手册之Authentication
		Authentication 安全验证可能有点复杂,一些网络请求需要认证,这里我们讨论两种常见的. Basic HTTP Auth HTTP auth是HTTP协议自带的用户名/密码验证.如果你使用的 ... 
- Swift网络封装库Moya中文手册之Endpoints
		Endpoints Endpoint是一种半私有的数据结构,Moya用来解释网络请求的根本构成.一个endpoint储存了以下数据: The URL. The HTTP method (GET,POS ... 
- Swift网络封装库Moya中文手册之Plugins
		Plugins Moya plugins用于反映请求的发起或接收.Plugins定义为 PluginType 属性,可以在请求准备发起和接收到返回数据时回调. Built in plugins Moy ... 
- Swift网络封装库Moya中文手册之Providers
		Providers 使用Moya,你可以通过一个 MoyaProvider 的实例发送所有网络请求,通过枚举来指定你要访问的具体API.在配置你的 Endpoint 之后,你差不多就做好了基础配置: ... 
- Swift网络封装库Moya中文手册之RxSwift
		RxSwift Maya提供了一个可选的MoyaProvider 子类 - RxMoyaProvider.在网络请求完成时,我们不再使用 request() 函数的回调闭包,而是使用 Observab ... 
- EasyX库简单中文手册
		EasyX库简单中文手册 作者: 时间: 2021/2/2 第一个例程 #include <graphics.h> // 图像相关库 #include <conio.h> // ... 
- Swift:网络库Alamofire
		一,Alamofire的说明与配置 1,什么是Alamofire (1)Alamofire 的前身是 AFNetworking.AFNetworking 是 iOS 和 OS X 上很受欢迎的第三方H ... 
- swift中第三方网络请求库Alamofire的安装与使用
		swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ... 
- Swift中文手册 -- The Basics
		原文:Swift中文手册 -- The Basics 基础部分 Swift 是 iOS 和 OS X 应用开发的一门新语言.然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 S ... 
随机推荐
- KMP  初级板子 待更新
			复杂度 O(n+m) 这个博主写的蛮不错的 http://www.cnblogs.com/SYCstudio/p/7194315.html 1.本文中,所有的字符串从0开始编号2.为了在程序中表示方便 ... 
- sql server 存储过程 procedure
			https://www.cnblogs.com/selene/p/4483612.html 
- junit中test注解测试使用案列解析二
			本文原创,转载请注明出处 在上文中,已经简单的解析了junit中test注解的使用方法,今天在进行test测试时,遇到了一个异常,于是想深 入的研究一下. 还原一下今天的异常代码: @Service ... 
- 05_Kafka Python_Consumer模拟
			Python客户端: Kafka-python 安装: pip install kafka-python Consumer端模拟代码 """ Kafka Consum ... 
- 附加题找bug
			private: void ReSize(int sz) { ) { return; } if(maxSize != sz) { T *arr = new T[sz]; if(arr == NULL) ... 
- 一套C#语言的日志控制系统
			using System; public delegate void LogHandle(Object log); public class PlayerHandle { public static ... 
- Windows 2008 更改网卡绑定顺序
			用 ncpa.cpl 或者用鼠标右键点网上邻居进去也好. 来到网卡列表画面. 然后,你会发觉没有菜单去操作[高级设置], 这里,最高级的步骤来了, 就是你需要按一个 [Alt]把菜单给显示出来,太神奇 ... 
- python模块——socket (实现简单的C/S架构端通信操作CMD)
			# 服务端代码#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" import socket impo ... 
- android--------ListView和ExpandableListView的侧滑删除操作
			本案例主要实现了ListView和ExpandableListView的侧滑删除操作功能 效果图: ListView的Adapter类 private class SlideAdapter exten ... 
- PHP导出为Word格式
			<?php $file = './html.doc'; $table = '<table width="100%"><tr><td>'.i ... 
