KVO(键值观察)

KVO(键值观察)是Objective-C 对观察者设计模式的一种实现。

举个栗子:指定一个被观察对象(A类),当被观察对象某个属性(A中的字符串name)发生更改时,对象(B类)会获得通知,并作出相应处理;且不需要给被观察的对象添加任何额外代码,就能使用KVO机制。

相比于其他语言,OC的一大特点就是动态派发,而swift为了优化性能,采用的是静态派发,所以我们需要一些操作来在swift中使用KVO。


import UIKit
import Foundation
class ViewController: UIViewController {//实例化被观察对象var nowname = names()override func viewDidLoad() {super.viewDidLoad()self.view.backgroundColor = .red//添加观察着nowname.addObserver(self, forKeyPath: "name",options: .new, context: nil)//3秒后执行被观察对象值的改变self.perform(#selector(ChangeName), with: nil, afterDelay: 3)}//override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {if nowname.name != ""{print("The new person is \(nowname.name)")self.view.backgroundColor = .yellow}}}extension ViewController{// 被观察对象的改变@objc func ChangeName(){nowname.name = "John"}}
//要继承NSObject 因为kvo是oc的东西
class names : NSObject{//设置动态派发 必须得要dynamic 否则无法观察@objc dynamic var name : String = ""
}

KVO给网络请求实时更改数据时需要进行的一系列操作带来了巨大的便利。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解

目录 1 设置请求映射路径1.1 环境准备 1.2 问题分析1.3 设置映射路径 2 请求参数2.1 环境准备2.2 参数传递2.2.1 GET发送单个参数2.2.2 GET发送多个参数2.2.3 GET请求中文乱码2.2.4 POST发送参数2.2.5 POST请求中文乱码 欢迎大家回到《Java教程之Spring30天快速入门》&#xff…

记录 | docker报错:Key permissions are too open: Set correct permissions

docker 报错: Key permissions are too open: Set correct permissions 具体的: WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0777 for /app/.ssh/id_rsa are too open. It is required that your private key files are NOT accessibl…

ls高级用法

1 使用通配符列出文件夹的内容 ls ~/videos/*.wmv 刚才你已经学会了如何在包含多个文件的目录中查找文件,但是还有一种更快的方法。如果你知道正在找的Tiger Woods的视频文件是Windows Media格式的,那么这个文件名一定是以.wmv为后缀的,这时…

认识缓存,一文读懂Cookie,Session缓存机制。

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

一、CM4树莓派系统烧录

操作系统(Raspberry Pi OS)应用程序 Raspberry Pi OS系统(树莓派推荐系统):较小的内存占用、较高的易用性以及对浮点单元的支持 浮点单元:浮点运算单元(FPU)是处理器中专门进行浮点…

windows redis 允许远程访问配置

安装好windows版本的redis,会以服务方式启动,但是不能远程访问,这个时候需要修改配置。redis安装路径下会有2个配置文件,究竟需要怎么修改才能生效呢?看下图 这里的redis服务指定了是redis.windows-service.conf文件&…

【CMU15445】Fall 2019, Project 4: Logging Recovery 实验记录

目录 实验准备实验测试Task 1: LOG MANAGER 实验准备 官方说明:https://15445.courses.cs.cmu.edu/fall2019/project4/ 实验测试 Task 1: cd build make log_manager_test ./test/log_manager_testTask 1: LOG MANAGER Log Manager 有一个全局的实例&#xff0…

Docker | 发布镜像到镜像仓库

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: MySQL学习 🥭本文内容:Docker | 发布镜像到镜像仓库 📚个人知识库: [Leo知识库]https://gaoziman.gitee.io/bl…

骨灰级程序员那些年曾经告诉我们的高效学习的态度

一、背景 以前阅读陈皓老师的左耳听风专栏中关于如何高效学习的总结让我收货颇丰,今天总结了一下,分享给大家 老师说: 学习是一件“逆人性”的事,就像锻炼身体一样,需要人持续付出,会让人感到痛苦&#…

c语言堆排序(详解)

堆排序 堆排序是一种基于二叉堆数据结构的排序算法,它的基本概念包括: 建立堆:将待排序的列表构建成一个二叉堆,即满足堆的性质的完全二叉树,可以是最大堆或最小堆。最大堆要求父节点的值大于等于其子节点的值&#x…

基于node 安装express后端脚手架

1.首先创建文件件 2.在文件夹内打开终端 npm init 3.安装express: npm install -g express-generator注意的地方:这个时候安装特别慢,最后导致不成功 解决方法:npm config set registry http://registry.npm.taobao.org/ 4.依次执行 npm install -g ex…

Qt之Ui样式表不影响子类的配置

Qt之Ui样式表不影响子类的配置 问题 在ui界面上布局时,当对容器进行样试设计时,会对容器内其它成员对象也进行了修改 分析 对应*.ui文件内容 从这个写法来看,它的样式属性会影响其成员对象样式属性。 解决方法 在容器的样式表中写时适…

如何将Galaxybase图数据库应用于电力设备管理

导读 近日,受强冷空气影响,部分北方地区出现不同程度的降雪,并持续降温。据国家电网发布的预警通知,要求启动预警响应和应急机制,密切跟踪灾害预警信息和应急响应情况,滚动研判分析覆冰、积雪、低温等对电…

beyond compare文件夹比较时候文本乱码问题解决

“格式”,在下面的左侧编码重写和右侧编码覆盖选择 GB2312/UTF-8/GBK,这个可以根据自己喜好和文本自身的encode选择。

Golang中使用errors返回调用堆栈信息

Golang的errors包返回堆栈信息 标准库errors提供了处理错误的方法。比如常用的 func New(text string) error 用该方法处理错误信息,就只会输出自定义的 text 到控制台或者日志文件,没有其它辅助排查的信息输出,所以常规我们就只能根据 te…

任务系统设计

基本结构 条件 完成或改变特定的条件,触发任务状态的改变,一般由各个系统触发; 任务 一般来说,当任务结束,也就是相应的条件完成,比如常见的主线、支线、每日、每周、委托、成就任务等 主要的配置项 …

跟着我学Python基础篇:08.集合和字典

往期文章 跟着我学Python基础篇:01.初露端倪 跟着我学Python基础篇:02.数字与字符串编程 跟着我学Python基础篇:03.选择结构 跟着我学Python基础篇:04.循环 跟着我学Python基础篇:05.函数 跟着我学Python基础篇&#…

从零构建属于自己的GPT系列6:模型部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1:数据预处理 从零构建属于自己的GPT系列2:模型训…

RocketMQ源码 Broker-ConsumerFilterManager 消费者数据过滤管理组件源码分析

前言 ConsumerFilterManager 继承了ConfigManager配置管理组件,拥有将内存数据持久化到磁盘文件consumerFilter.json的能力。它主要负责,对在消费者拉取消息时,进行消息数据过滤,且只针对使用表达式过滤的消费者有效。 源码版本&…

SPWM技术

一、基于数字正弦序列的数字SPWM 图1图中T0为正弦调制波周期;Ts为系统采样周期(即载波信号周期或逆变开关器件的开关频率周期);N T0/Ts为载波比;Vdc为SPWM脉冲幅值;M≤1为脉宽调制比,其决定了信号最大脉冲宽度为MTs≤T…