首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

了解 Swift 的 Result 类型

image.png Result 通常希望函数成功返回一些数据,或者如果失败则返回错误。...我们通常使用throwing函数对此建模,因为如果函数调用成功,我们将获得数据,但是如果抛出错误,则将运行catch代码块,因此我们可以独立处理这两个函数。但是,如果函数调用没有立即返回怎么办?...首先,我们需要定义可以引发哪些错误。您可以定义任意多个,但在这里我们将说 URL 错误,请求失败或发生未知错误。...请记住,Result是为了表示某种成功或失败而设计的,在这种情况下,我们要说的是,成功案例将包含从网络返回的任何内容的字符串,而错误将是某种NetworkError。...到目前为止,我们所做的只是编写使用Result的函数;我们还没有编写任何能处理返回结果的文件。请记住,无论发生什么情况,结果始终包含两条信息:结果的类型(成功或失败)以及其中的某些内容。

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    通过 3 个简单的步骤测试使用了系统单例的 Swift 代码

    单例也是一个相当常见的错误来源,状态最终被共享和改变导致没有在整个系统中正确传播。 然而,虽然我们可以重构我们自己的代码,只在真正需要的地方使用单例,但我们对系统API给我们的东西却无能为力。...但好消息是,你可以使用一些技术来使你的代码在使用系统单例时仍然易于管理和测试。...} func load(from url: URL, completionHandler: @escaping (Result) -> Void) { let task = URLSession.shared.dataTask...这样,我们就不必在测试中创建多个模拟,而可以专注于NetworkEngine的API。 2....与其用大量的逻辑来创建复杂的模拟,不如让它们返回一些硬编码的值,然后在测试中进行断言,这通常是个好主意。否则,风险是你最终测试你的模拟比你实际测试你的生产代码更多。 就是这样!

    47010

    Alamofire-URLSession必备技能

    因为我们的Alamofire是对苹果URLSession的封装,所以在探索Alamofire之前,我们来看看URLSession的必备基础 一、请求网络的基本格式 URLSession.shared.dataTask...(with: url) { (data, response, error) in if error == nil { print("请求成功\(String(describing...支持后台转移 sessionSendsLaunchEvents:一个布尔值,指示在传输完成时是否应该在后台继续或启动应用程序 isDiscretionary:一个布尔值,用于确定是否可以根据系统的判断来调度后台任务以获得最佳性能...在NSURLProtocol类本身是一个抽象类,可以为与特定URL方案的URL处理基础设施。您可以为您的应用支持的任何自定义协议或URL方案创建子类 8....假如内容没有变化,那么响应就从本地缓存返回数据。

    2.1K20

    iOS_单元测试一之UnitTests

    2、Action(调用) 调用需要测试的方法或流程。 3、Assert(断言) 判断调用返回的结果是否符合预期。...{} override func setUp() {} // 同上(执行顺序在setUpWithError之后)适用于初始化无异常抛出的情况 override func tearDown() {} /.../ 同下(执行顺序在tearDownWithError之前)适用于清理无异常抛出的情况 // 在每个测试方法执行之后都会执行,用于对每个测试方法都需要做的清理操作(有异常时会抛出:适用于清理会有异常抛出的情况...let dataTask = URLSession.shared.dataTask(with: url) { (data, _, _) in // 断言下载数据不为nil XCTAssertNotNil...OC`的私有属性和方法,可以在当前测试用分类再次声明一下就可以测试了 4、添加测试Target方法: 方法一:在创建项目时勾选 方法二:在导航栏的测试tab添加:如图 Demo github地址 参考

    93220

    Redis 事务

    如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH 。 返回值: 总是返回 OK 。...语法:WATCH key [key …] 说明: 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 返回值: 总是返回 OK 。...如果在执行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被执行了的话,那么就不需要再执行 UNWATCH 了。...返回值: 总是返回 OK 。 示例: 在之后的 EXEC 命令中会详细介绍。 EXEC 自1.2.0可用。 时间复杂度:事务块内所有命令的时间复杂度的总和。...示例: # 在 MULTI 命令的实例中我们演示了事务正常执行的情况 # 客户端1 # 使用 WATCH 监视 key 且正常执行成功 coderknock> WATCH testWATCH OK coderknock

    41830

    stun协议笔记一(stun格式简介)「建议收藏」

    响应类型分为成功和出错两种,用来帮助快速处理STUN信息。...方法和类是正交的,因此对于每种方法,对该方法的请求,成功响应,错误响应和指示都是可能的。拓展定义新方法的时候注意要指定该方法允许哪些类型的消息。...2、STUN报文属性(attributes) 在STUN报文头部之后,通常跟着0个或者多个属性,每个属性必须是TLV编码的(Type-Length-Value)。...Family为IP类型,即IPV4(0x01)或IPV6(0x02),Port为端口,Address为32位或128位的IP地址。...这个错误响应仅在请求包括一个 USERNAME属性和一个有效的MESSAGE-INTEGRITY属性时发送;否则它不会被发送,而是发送错误代码为400的错误响应; 400:错误请求(Bad Request

    2.3K30

    windows WinExec()

    : 若 函数调用成功,则返回值大于31。...若 函数调用失败,则返回值为下列之一: ① 0: 系统内存或资源已耗尽。 ② ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。...大于 31 {调用成功} 等于 0 { 内存不足} ERROR_FILE_NOT_FOUND = 2; {文件名错误} ERROR_PATH_NOT_FOUND = 3; {路径名错误...,这个函数会返回一个不小于31的值,否则调用失败,其返回值的意义如下: 0 系统内存或资源不足 ERROR_BAD_FORMAT .EXE文件格式无效(比如不是32位应用程序) ERROR_FILE_NOT_FOUND...指定的文件设有找到 ERROR_PATH_NOT_FOUND 指定的路径没有找到 这个函数和system()非常类似,只能运行.EXE文件,这样在WINDOWS中有它不尽人意的地方,比如不能用此方法通过关联的方法打开文件

    51320

    fork函数

    创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。 它不需要参数并返回一个整数值。...下面是fork()返回的不同值。 负值:创建子进程失败。 零:返回到新创建的子进程。 正值:返回父进程或调电者。...该值包含新创建的子进程的进程ID 函数原型 pid_t fork( void); (pid_t 是一个宏定义,其实质是int 被定义在#include中) 返回值: 若成功调用一次则返回两个值...在不同的UNIX (Like)系统下,我们无法确定fork之后是子进程先运行还是父进程先运行,这依赖于系统的实现。所以在移植代码的时候我们不应该对此作出任何的假设。 为什么fork会返回两次?...在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。

    1.7K20

    iOS 面试策略之系统框架-网络、推送与数据处理

    8) 客户端解锁返回信息。客户端会用刚刚生成的钥匙进行解密,将内容显示在浏览器上。...关键词:#闭包 Completion Handler 一般用于处理 API 请求之后的返回数据。...当URLSessionTask 结束之后,无论成功或是报错,Completion Handler 一般都会接受 3 个参数:Data, URLResponse,Error,注意这 3 个参数都是 Optional...因为它总是在 API 请求之后才执行,也就是说方法已经返回才会涉及 Completion Handler,是个经典的逃逸闭包情况。 6....应该返回错误信息以方便日后调试,而不是应该 return 用 URLSession 的单例不妥。这样每次请求创建一个 dataTask 是一种浪费,同时短时间内多次请求会不必要的造成服务器压力。

    1.9K00

    【网络系列】 HTTP状态码:网络通信的语言

    2xx(成功状态码):表示请求正常处理完毕。 3xx(重定向状态码):表示需要进行额外操作以完成请求。 4xx(客户端错误状态码):表示请求包含语法错误或无法完成请求。...5xx(服务器错误状态码):表示服务器在处理请求的过程中发生了错误。 1xx 信息性状态码 1xx 状态码是临时的响应,主要用于通信过程中的协议切换或请求接收的确认。...对于 4xx 和 5xx 错误,浏览器通常会显示错误页面。 服务器端处理 服务器端在处理请求时,会根据业务逻辑返回相应的状态码。...例如,当资源被成功创建时,服务器会返回 201 状态码;当资源不存在时,会返回 404 状态码。 API 设计 在 RESTful API 设计中,HTTP 状态码的使用尤为重要。...它不仅能够提供请求处理的结果,还能够传达操作的性质。例如,使用 201 表示资源的创建,使用 204 表示资源的删除成功。

    6710

    优雅的处理网络数据,你真的会吗?不如看看这篇.

    正常情况下,我们在构建 UITableView 这个控件的时候,需要对它的行数(numsOfRow)做一个初始化,这个行数对我们实现无限加载和无缝加载是一个很关键的因素,假设我们每次根据服务端返回的数据量去更新...回到我上面所说的无限滚动, 其实实现起来并不难,正常情况下,我们向服务端请求大量相同类型的数据的时候,都会提供一个接口,我称之为分页请求接口,该接口在每次数据返回的时候,都会告诉客户端总共有多少页数据,...DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 2) { print("+++++++++++ 模拟网络数据请求返回成功...completeHandler(cachedImage) } return } URLSession.shared.dataTask...completeHandler(cachedImage) } return } URLSession.shared.dataTask

    1.4K20
    领券