Swift 属性值监测

大家一定很熟悉Object-c中的观察者模式吧。Swift提供了一种更加简单的实现方式

当我们需要对对象的属性值进行赋值的时候,可以使用willSet和didSet进行对象属性值变化的观察。

我们直接看一个例子吧。创建一个类 Student 对属性 name进行监测

首先是Student类的定义

class Student{
    init(name:String){
        userName=name;
    }

    var userName:String=""{
        willSet{
            println("Student name newValue:\(newValue)")
        }
        didSet{
            println("Student name oldValue:\(oldValue)")
        }

    }
}

然后我们对Student进行初始化修改他的userName 试试看效果

  var student=Student(name: "张三")//注意,初始化的时候是不调用监测方法的
        student.userName="lisi"

打印结果如下

Student name newValue:lisi

Student name oldValue:张三

很简单吧,有问题可以继续讨论

苹果开发群 :414319235  欢迎加入  欢迎讨论问题

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 12:16:30

Swift 属性值监测的相关文章

Swift属性

属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性可以用于类.结构体和枚举里,存储属性只能用于类和结构体. 存储属性和计算属性通常用于特定类型的实例,但是,属性也可以直接用于类型本身,这种属性称为类型属性.另外,还可以定义属性监视器来监控属性值的变化,以此来触发一个自定义的操作.属性监视器可以添加到自己写的存储属性上,也可以添加到从父类继承的属性上. 存储属性 简单来说,一个存储属性就是存储在特定类或结构体的实例里的一个常量或变

使用innerHTML获取HTML代码时,HTML标记属性的双引号好多都消失不见了,原来是属性值中包含空格才会保留双引号

最近搞的一个项目中所使用的方式比较奇怪,用Label显示HTML内容,然后不断地使用JS把Label的innerHTML复制到TextBox中. 但是,昨天发现了一个问题,获取元素值的时候,有时候正常,有时候不正常,然后进入了漫长的DEBUG.. 调试过程中,监测Label和TextBox的值,发现获取到Label的值是未被改变的,控件加载的时候是怎样就怎样,在页面中是以SPAN元素显示,在查看网页源代码的时候可以看到被修改了,但是在后台无论怎么获取都是页面加载时赋予的未经修改之前的值. 而Te

22.swift属性

/* 存储属性 其实Swift中的存储属性就是以前学习OC中的普通属性, 在结构体或者类中定义的属性, 默认就是存储属性 */ struct Person { var name: String var age: Int } var p:Person = Person(name: "lnj", age: 30) p.name = "hm" p.age = 50 /* 常量存储属性 常量存储属性只能在定义时或构造时修改, 构造好一个对象之后不能对常量存储属性进行修改 *

OC、Swift 属性、成员变量

一.@property 使用@property 修饰的变量,编译器会自动生成带下划线的同名属性和与之对应的 get set 方法.通过 . 的方式访问属性其实是访问与之对应的 get set 方法,所以在 get set 中不可以使用self.属性 的形式,否则会陷入死循环.当同时重写两个方法中是需在实现文件中添加 @synthesize property = _property; 在类中,可直接访问其对应的属性. // a.h @property (nonautomic,copy) NSStr

Key-Value Observing (键值监测)

Key-Value Observing (键值监测) 简介 KVO是一套当目标对象的属性值改变时观察者对象能够接受到通知的机制.必须先理解KVC才能更好的理解KVO,前者是后者的实现基础. 这样的通信机制在MVC设计模式很是常见 实现过程简单来说分为3步: 1.添加观察这和监测对象 2.监测对象改变 3.收到值改变通知,处理后续逻辑 举个生活中的例子就是给银行卡开通短信通知的业务,总体也是分3步" 1.去银行办理短信业务 2.账号财产变动 3.收到短信通知 KVO是框架级别的服务,无需自己发送通

swift 属性和方法

属性和常量 如果创建了一个结构体的实例并赋值给一个常量,则无法修改实例的任何属性: let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4) rangeOfFourItems.firstValue = 6 当值类型的实例被声明为常量的时候,它的所有属性也就成了常量 当引用类型的实例赋给一个常量后,仍然可以修改实例的变量属性. 延迟属性 属性声明前使用@lazy来标示一个延迟存储属性. 延迟存储属性是指当第一次被调用的时候才

webBrowser控件中获取元素 的class 属性值

html 代码如下: <TR id="t030006" class="sr plus selected"> <TD><INPUT id=cvrgNo030006 value=030006 readOnly CHECKED type=checkbox jQuery1456994811776="96"></TD> <TD>车辆损失险 </TD> <TD style=&quo

(WPF)属性值继承

属性值继承并不同于传统面向对象的类继承,而是指属性值自顶向下沿着元素树传递. 下面的代码在Window 元素上设置了Font属性.两个设置将会沿着逻辑树向下传递,并由子元素继承. 但是若子元素如设置了这样的属性,则不受其父元素设置的影响. <span style="font-size:14px;"> </span><span style="font-size:12px;"><Window xmlns = "http

ArcGIS10.1 属性值排序,图斑排序

ArcGIS10.1技术交流(第4期) 属性值排序,图斑排序 第一讲 介绍了arcgis10.1中的排序这一个工具,介绍了如何利用这一个工具对属性值进行排序,以及对图斑块进行一个空间排序,以及途中还介绍了一下目前网上一种比较普通方法来进行图斑排序的一个原理,再次粗略的引了一下皮亚诺曲线 点击学习 第二讲 为上一讲讲到的ArcGIs自带的排序工具的下承接(),介绍从提取图斑外接矩形的左上点坐标,导出至Excel,对得到的坐标值进行两个排序,得到一个排序值,但是重点呢,不是结果,而是告诉大家这种方法