Swift中实现Observable机制

前端之家收集整理的这篇文章主要介绍了Swift中实现Observable机制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://www.jb51.cc/article/p-tdefgbcq-vc.html

今天给别人讲个Observable的实现和使用场景,结合Observable-Swift github: https://github.com/slazyk/Observable-Swift 讲了半天貌似还没有特别明白,故写了个简易的实现,讲述了下Observable属性监控机制。

//: Playground - noun: a place where people can play@H_404_8@

import@H_404_8@ UIKit
import@H_404_8@ Foundation

// MARK: - Observable@H_404_8@
class Observable<@H_404_8@T>@H_404_8@ {
    // 定义block结构@H_404_8@
    typealias Observer =@H_404_8@ T -> @H_404_8@Void@H_404_8@

    // 申明一个block,用于数据改变的执行@H_404_8@
    private@H_404_8@ var@H_404_8@ observer: Observer?@H_404_8@

    // 数据发生变更,则通过observer告知@H_404_8@
    var@H_404_8@ value: T {
        didSet {
            observer?@H_404_8@(value)
        }
    }

    init(_ v: T) {
        value =@H_404_8@ v
    }

    func observe(observer: Observer?@H_404_8@) {
        self@H_404_8@.@H_404_8@observer =@H_404_8@ observer
        observer?@H_404_8@(value)
    }
}

// MARK: - People@H_404_8@
struct PeopleModel {
    let@H_404_8@ firstName: Observable<@H_404_8@String@H_404_8@>@H_404_8@
    let@H_404_8@ lastName: Observable<@H_404_8@String@H_404_8@>@H_404_8@

    init(firstName: String@H_404_8@,lastName: String@H_404_8@) {
        self@H_404_8@.@H_404_8@firstName =@H_404_8@ Observable(firstName)
        self@H_404_8@.@H_404_8@lastName =@H_404_8@ Observable(lastName)
    }
}

// MARK: - Test@H_404_8@

// test1@H_404_8@
let@H_404_8@ people =@H_404_8@ PeopleModel(firstName: "sunny"@H_404_8@,lastName: "liu"@H_404_8@)
people.@H_404_8@firstName.@H_404_8@observe {
    newValue in@H_404_8@
    print("firstName changed: \(newValue)"@H_404_8@)
}
people.@H_404_8@lastName.@H_404_8@observe {
    print("lastName changed: \($0)"@H_404_8@)
}
people.@H_404_8@firstName.@H_404_8@value =@H_404_8@ "sunny2"@H_404_8@
people.@H_404_8@lastName.@H_404_8@value =@H_404_8@ "liu2"@H_404_8@

// test2@H_404_8@
class House {
    let@H_404_8@ lableHouseName =@H_404_8@  UILabel()

    init() {

    }

    var@H_404_8@ people: PeopleModel?@H_404_8@ {
        didSet {
            people?@H_404_8@.@H_404_8@firstName.@H_404_8@observe{
                [@H_404_8@unowned self@H_404_8@]@H_404_8@ in self.lableHouseName.text = $0 } } } }@H_404_8@

这样貌似容易理解了,O(∩_∩)O哈哈~

猜你在找的Swift相关文章