[转]Swift中实现Observable机制

本文通过Swift语言实现了一个简易的Observable模式,展示了如何监控属性的变化并通知观察者。该实现适用于UI更新等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-优快云,谢谢! 
原文地址: http://blog.youkuaiyun.com/cocos2der/article/details/51917539

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

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

import UIKit
import Foundation

// MARK: - Observable
class Observable<T> { // 定义block结构 typealias Observer = T -> Void // 申明一个block,用于数据改变的执行 private var observer: Observer? // 数据发生变更,则通过observer告知 var value: T { didSet { observer?(value) } } init(_ v: T) { value = v } func observe(observer: Observer?) { self.observer = observer observer?(value) } } // MARK: - People struct PeopleModel { let firstName: Observable<String> let lastName: Observable<String> init(firstName: String, lastName: String) { self.firstName = Observable(firstName) self.lastName = Observable(lastName) } } // MARK: - Test // test1 let people = PeopleModel(firstName: "sunny", lastName: "liu") people.firstName.observe { newValue in print("firstName changed: \(newValue)") } people.lastName.observe { print("lastName changed: \($0)") } people.firstName.value = "sunny2" people.lastName.value = "liu2" // test2 class House { let lableHouseName = UILabel() init() { } var people: PeopleModel? { didSet { people?.firstName.observe{ [unowned self] in self.lableHouseName.text = $0 } } } }

 

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

转载于:https://www.cnblogs.com/linganxiong/p/5896996.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值