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

封装一个 Swift-Style 的网络模块

Swift 跟 OC 有着完全不同的设计哲学,它鼓励你使用 protocol 而不是 super class,使用 enum struct 而不是 class,它支持函数式特性、范型类型推导,让你可以轻松封装异步过程...如果你还是用 OC 的思维写着 Swift 代码,那可以说是一种极大的资源浪费,你可能还会因为 Swift 弱鸡的反射而对它感到不满,毕竟 Swift 在强类型安全性方面下足了功夫,如果不使用 OC...Alamofire 使用 Result 来表示请求返回的结果,它是个 enum,长这样: public enum Result { case...-> Void) { switch self { case .Failure(let error): handler(error)....flatMap { $0.valueForKey(responseKey) } } checkJSONDict用来处理服务器返回的错误信息,具体的处理逻辑不同项目都不一样,主要看跟服务器的约定

1.9K41
您找到你想要的搜索结果了吗?
是的
没有找到

Swift写一个响应式编程库

之前, 需要定义订阅后返回的数据结构,这里我只关心成功失败两种状态的数据,所以可以这样写: enum Result { case success(Value) case error(Error) }...map map 比较简单,就是将一个 返回值为包装值的函数 作用于一个包装(Wrapped)值的过程, 这里的包装值可以理解为可以包含其他值的一种结构,例如 Swift 中的数组,可选类型都是包装值。...flatMap map 很相似,但也有一些不同,以可选型为例,Swif t是这样定义 map flatMap 的: public func map(_ transform: (Wrapped)...flatMap map 的不同主要体现在 transform 函数的返回值不同。map 接受的函数返回值类型是 U类型,而 flatMap 接受的函数返回值类型是 U?类型。...= "¥99.9" let price = aString.flatMap{ Float($0)} // Price is nil 我们这里 flatMap Swift 中数组以及可选型中的 flatMap

1K50

Swift写一个响应式编程库

之前, 需要定义订阅后返回的数据结构,这里我只关心成功失败两种状态的数据,所以可以这样写: enum Result { case success(Value) case error(Error) }...map map 比较简单,就是将一个 返回值为包装值的函数 作用于一个包装(Wrapped)值的过程, 这里的包装值可以理解为可以包含其他值的一种结构,例如 Swift 中的数组,可选类型都是包装值。...flatMap map 很相似,但也有一些不同,以可选型为例,Swif t是这样定义 map flatMap 的: public func map(_ transform: (Wrapped)...flatMap map 的不同主要体现在 transform 函数的返回值不同。map 接受的函数返回值类型是 U类型,而 flatMap 接受的函数返回值类型是 U?类型。...= "¥99.9" let price = aString.flatMap{ Float($0)} // Price is nil 我们这里 flatMap Swift 中数组以及可选型中的 flatMap

85970

46 道 Swift 常见面试题解

4、实现一个 min 函数,返回两个元素较小的元素 5、map、filter、reduce 的作用 6、map 与 flatmap 的区别 7、什么是 copy on write 8、如何获取当前代码的函数名行号...是什么意思 17、associatedtype 的作用 18、什么时候使用 final 19、public open 的区别 20、声明一个只有一个参数没有返回值闭包的别名 21、定义静态方法时关键字...rethrows -> [ElementOfResult] 这个方法, 中间的函数返回值为一个可选值, 而 flatmap 会丢掉那些返回值为 nil 的值 例如 ["1", "@", "2", "3"..., 在模块外无法继承, 而 open 则可以任意继承, 公开度来说, public < open ▐ 2.20 声明一个只有一个参数没有返回值闭包的别名 没有返回值也就是返回值为 Void typealias..., 如果要监控一个属性, 则必须要标记为 dynamic ▐ 2.24 什么时候使用 @objc @objc 用途是为了在 Objective-C Swift 混编的时候, 能够正常调用 Swift

4K33

RxJava2

而函数式编程是面向数学的抽象,将计算描述为一种表达式求值,函数可以在任何地方定义,并且可以对函数进行组合。响应式编程是一种面向数据流变化传播的编程范式,数据更新是相关联的。...,参数就是要请求的数量,一般如果不限制请求数量,可以 // 写成Long.MAX_VALUE。...A 发射器 B 各取出一个事件来组合,并且一个事件只能被使用一次,组合的顺序是严格按照事件发送的顺序来进行的,所以上面截图中,可以看到,1 永远是 A 结合的,2 永远是 B 结合的。...FlatMap 是一个很有趣的东西,我坚信你在实际开发中会经常用到。...concatMap 上面其实就说了,concatMap 与 FlatMap 的唯一区别就是 concatMap 保证了顺序,所以,我们就直接把 flatMap 替换为 concatMap 验证吧。

66310

Swift3.0 Alamofire初级应用

序:做过iOS开发的人肯定都知道AFN,现在Swift逐渐流行AFN团队又用Swift写了Alamofire。从头开始学习一下,看看新的Alamofire有什么性能的优化不同。...功能特点 1、请求连接,处理接受不同类型的返回 2、 URL / JSON / plist 参数编码 3、上传 File / Data / Stream / MultipartFormData 4、用请求或者恢复数据下载文件...5、身份认证url凭证 6、HTTP 返回验证 7、上传或者下载进程显示 8、cURL命令输出 9、动态适应和重试请求 10、TLS证书公钥锁 11、网络是否可用判断 12、完整的单元检测 组件库..., completionHandler: @escaping (DataResponse) -> Void)) -> Self 响应验证 在默认情况下,Alamofire对待任何完整的请求不管什么响应内容都是成功的...) 给一个请求添加一个自定义的请求头,这个请求头必须是全局的,在你请求的时候更容易去获取改变请求头。

2K20

Why Swift? Generics(泛型), Collection(集合类型), POP(协议式编程), Memory Management(内存管理)

return input; } 这两个函数都是可以允许任意类型的 input 参数,不同在于返回的类型在 anyAdd 函数里是可以入参不一样的,这样就会失控,在后续的操作中容易出错。...makeIterator() -> Self.Iterator //... } 重新查找靠的是这个新的迭代器,而对于切片这样的会重新生成新 Sequence 的操作就需要 SubSequence 进行存储返回...下面看看 Swift 源码(swift/stdlib/public/core/SequenceAlgorithms.swift.gyb)中 flatmap 的实现: //===------------...WhiteDragon().fire() BlackDragon().fly() YellowDragon().fire() 可以看到一来没有了重复代码,二来结构也清晰了很多而且更容易扩展,Dragon 的种类能力的组合也更加方便清晰...Swift 语言是支持编译型语言的直接派发,函数表派发消息机制派发三种派发方式的,下面分别对这三种派发方式说明下。

1.2K20

RxSwift 实战操作【注册登录】

Service文件主要负责一些网络请求一些数据访问的操作。然后供ViewModel使用,由于本次实战没有使用到网络,所以我们只是模拟从本地plist文件中读取用户数据。...我们先将usernamepassword组合,得到一个元素是它俩组合的元祖的流。...然后对registerTaps事件进行监听,我们拿到每一个元组进行注册行为,涉及到耗时数据库操作,我们需要对这个过程进行监听,所以我们使用flatMap函数,返回一个新的流。...创建一个LoginViewController.swiftLoginViewModel.swift文件,有了上述注册功能的讲解,相信登录功能也很容易了。...cellIdentifier: String, cellType: Cell.Type = default) -> (O) -> (@escaping (Int, S.Iterator.Element, Cell) -> Swift.Void

4.8K60

Swift 项目中涉及到 JSONDecoder,网络请求,泛型协议式编程的一些记录想法

Codable 是 Encodable Decodable 两个协议的组合,写法如下: public typealias Codable = Decodable & Encodable 当然 JSON...那就是有的键值有时会返回有时不会返回,那么这个 struct 怎么兼容呢? 好在swift 原生就支持了 optional,只需要在属性后加个问号就行了。...于是动手改改先前的实现,学习 Alamofire 的做法,首先创建一个类,然后简化掉 request 写法,再建个 block 方便请求完成后的数据返回处理,最后使用泛型支持不同 struct 的数据统一返回...,本地定义了很多的 model 结构体,那么请求时只需要指明不同的 model 类型,block 里就能够直接返回对应的值。...默认都按照 GET 方法请求,在实际项目中会用到其它比如 POST 等方法,Alamofire 的做法是这样的: /// HTTP method definitions. /// /// See https

6.6K20
领券