Swift网络封装库Moya中文手册之Targets

摘要:
Targets使用Moya,我们首先需要定义一个target-这通常是继承TargetType协议的枚举变量。接下来,你的app只需要处理这些targets,也就是一些你希望调用API完成的操作。}path可以用来拼接相对路径,例如:publicvarpath:String{switchself{case.Zen:return"/zen"case.UserProfile:return"/users/"case.UserRepositories:return"/users//repos"}}注意:这里我们使用了一个String的扩展方法URLEscapedString。我们的TargetType进展不错,不过还没完成。这是TargetType协议所必须的。}}做完这些,构造Provider就很简单了:letGitHubProvider=MoyaProvider()EscapingURLs这是一个扩展的示例,可以简单的将普通字符串"likethis"转换为URL编码字符串"like%20this":extensionString{varURLEscapedString:String{returnself.stringByAddingPercentEncodingWithAllowedCharacters!
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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Django 表操作-表之间的关系(建立在MySQL上)最近准备把FlvDownloader重写一下下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java里import语句使用

文件一: package com.xuexi;//在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。// import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。public class Import { String name; int age; Stri...

1.golang数据类型,转换,变量类型检查,生命周期、闭包,打印方法,指针简介

golang是强类型,静态语言 1.golang 数据类型 布尔类型 true/false var b bool ,在golang底层bool不是1/0表示的 数值类型 :var i int =3 / var i:=3 数字在计算机内部是以二进制的方式存储的,二进制位就是一系列布尔值,取值要么为1,要么为0. 1位表示1或0,对于4位整数可以表示16个不同...

eclipse+maven+ssm框架搭建

eclipse+maven+ssm框架 0、系统环境 1)Windows 10 企业版 2)JDK 1.8.0_131 3)Eclipse Java EE IDE for Web Developers  Version: Neon.3 Release (4.6.3) 4)Tomcat 8.5 1、maven下载及配置 maven的下载地址:http:...

html2javabean

这个有“标题党”之嫌了。名字但是像模像样。关于网页爬虫(就是抓取网页内容)的小工具大家都写过吧。可是一般写这样的东西都是类似完成某个简单的需求而 写的类似脚本语言的东西,一般代码不多,类似黑客程序代码风格。大家应该没有做过大型项目全部以抓取网页内容为数据源吧?我就做过这样的项目,呵呵。如果真是一个多人合作,周期较长,又是一个产品型的项目,需要维护,升级,那...

模块三 GO语言实战与应用-并发安全字典sync.Map(上)

在前面,我几乎已经把 Go 语言自带的同步工具全盘托出了。你是否已经听懂了会用了呢? 无论怎样,我都希望你能够多多练习、多多使用。它们和 Go 语言独有的并发编程方式并不冲突,相反,配合起来使用,绝对能达到“一加一大于二”的效果。 当然了,至于怎样配合就是一门学问了。我在前面已经讲了不少的方法和技巧,不过,更多的东西可能就需要你在实践中逐渐领悟和总结了。...

C#第三方Aspose.Words.dll导出Word(书签模板)方式说明

项目有遇到需要导出Word,在别人写好的基础上去修改样式,导出后发现样式不正确不整齐,于是采用模板的方式重新导出 1.模板word文件的制作,本人用office2013,在设计好需要的整个表格之后,在你需要替换的位置"插入"--书签 并命名,此命名需要在程序中进行替换 将做好的模板word文件放在程序目录下 2.引用Aspose.Words.dll 3.新...