[Swift]31、面向协议编程&响应式编程

1、面向协议编程

面向协议编程(简称POP)
是Swift的一种编程范式、Apple于2015年WWDC提出
在Swift的标准库中,能见到大量POP的影子
同时,Swift也是一门面向对象的编程语言(简称OOP)
在Swift开发中,OOP和POP是相辅相成的,任何一方并不能取代另一方

2、扩展方法

给某个类扩展方法

// 前缀类型
struct MJ<Base> {
    var base: Base
    init(_ base: Base) {
        self.base = base
    }
}
// 利用协议扩展前缀属性
protocol MJCompatible { }
extension MJCompatible {
    var mj: MJ<Self> { MJ(self) }
    static var mj: MJ<Self>.Type { MJ<Self>.self }
}
// 让String拥有前缀属性
extension String: MJCompatible {}

// 给mj前缀扩展功能
extension MJ where Base : ExpressibleByStringLiteral {
    var numberCount: Int {
        let string = base as! String
        var count = 0
        for c in string where ("0"..."9").contains(c) {
            count += 1
        }
        return count
    }
    static func test() {
    }
}

// 类
class Person { }
class Student: Person { }

extension Person: MJCompatible {}
extension MJ where Base: Person {
    func run() { }
    static func test() {}
}
Person.mj.test()
Student.mj.test()

let p = Person()
p.mj.run()
let s = Student()
s.mj.run()

3、利用协议实现类型判断

// 实例判断是否是数组
func isArray(_ value: Any) -> Bool { value is [Any]}
isArray([1, 2])
isArray(NSArray())
// 利用协议类型判断是否是数组
protocol ArrayType { }
extension Array: ArrayType {}
extension NSArray: ArrayType {}
func isArrayType(_ type: Any.Type) -> Bool { type is ArrayType.Type }
isArrayType([Int].self)
isArrayType([Any].self)
isArrayType(NSArray.self)
isArrayType(NSMutableArray.self)

4、响应式编程

响应式编程(Reactive Programming,简称RP)
也是一种编程范式,于1997年提出,可以简化异步编程,提供更优雅的数据绑定
一般与函数式编程融合在一起,所以也会叫做:函数响应式编程(Functional Reactive Programming,简称FRP)
比较著名的,成熟的响应式框架
ReactiveCocoa
ReactiveX

5、RxSwift核心角色

Observable:负责发送事件(Event)
Observer:负责订阅Observable,监听Observable发送的事件(Event)

public enum Event<Element> {
    case next(Element) //携带具体数据
    case error(Swift.Error) // 携带错误信息,表明Observalbe终止,不会在发出事件
    case completed // completed:表明Observable终止,不会再发出事件
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容