小工具      在线工具  汉语词典  css  js  c++  java

Swift 中的 willSet 和 didSet

Swift学习 额外说明

收录于:99天前

Swift 语言中使用 willSet 和 didSet 这两个特性来监视初始化之外的属性值的变化。

不用说太多,看下面的代码就可以快速理解


import Foundation


class People : NSObject
{
    //普通属性
    var firstName:String = ""
    var lastName:String  = ""
    var nickName:String  = ""
    
    //计算属性
    var fullName:String
    {
        get
        {
            return nickName + " " + firstName + " " + lastName
        }
    }
    
    //带属性监视器的普通属性
    var age:Int = 0
    {
        //我们需要在age属性变化前做点什么
        willSet
        {
            println("Will set an new value \(newValue) to age")
        }
        //我们需要在age属性发生变化后,更新一下nickName这个属性
        didSet
        {
            println("age filed changed form \(oldValue) to \(age)")
            if age<10
            {
                nickName = "Little"
            }else
            {
                nickName = "Big"
            }
        }
    }
    
    func toString() -> String
    {
        return "Full Name: \(fullName) " + ", Age: \(age) "
    }
    
}

var me = People()
me.firstName = "Zhang"
me.lastName  = "San"
me.age = 20

println(me.toString())

/*程序输出
Will set an new value 20 to age
age filed changed form 0 to 20
Full Name: Big Zhang San , Age: 20
*/
复制代码

//监听类的属性改变
class Person{
    var name : String = ""{
        //属性监听器:选中其中之一即可
        //监听属性即将发生改变,还没有改变
        willSet(newValue){
            print(newValue)//"why"
            print(name) //""
            print("属性即将改变")
        }
        //监听属性已经发生改变,已经改变
        didSet(oldValue){
            print(oldValue) //""
            print(name) //"why"
            print("属性发生改变")
        }
    }
}

let p = Person()
p.name = "why"

. . .

相关推荐

额外说明

网络通信概述

3.8.1. 网络概述 3.8.1.1 从进程间通信说起: 网络域套接字socket,可以理解是进程间通信,可以 在不同电脑的单个进程间通信。 3.8.1.2 网络通信层次: 在两台主机中 ------ 应用程序-> API-> OS(网卡驱动)-> 硬

额外说明

使用java进行补零操作

很多情况下都会用到补零操作,譬如说工号01,0003什么的。以下代码用for循环和while循环实现简单的补零操作(在数字之前补零),可以补一个零,也可以补多个零。 public class AddZero { public static void m

额外说明

java面试题(24)

1、重写equals()方法的原则 1、对称性: 如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是 “true”。 2、自反性: x.equals(x)必须返回是“true”。 3、传递性: 如果x.equalsl(y

额外说明

Java基础——Arrays类的排序方法

1.Arrays类的排序方法: public static void sort(类型[] a)        //对数组进行默认升序排序 public static <T> void sort(类型[] a, Comparator<?suprt T >

额外说明

【STM32】知识补充 晶振的基本原理及其应用

【STM32】知识补充 晶振的基本原理及其应用 概述 晶振的基本原理 晶振的性能参数 晶振的分类 晶振的应用 晶振器在 STM32 上的应用 总结 概述 晶振作为现代电子技中的重要组件, 广泛应用于各种电子设备中, 起到稳定时钟信号的作用. 本文将为您解

额外说明

单机:Oracle 12CR2 数据库一键安装

前言 本文将演示如何使用脚本一键安装 Oracle 12CR2 单机数据库的全过程。 安装前准备 在生产环境中,Linux 操作系统和网络一般不是由 DBA 来配置,为了更贴合生产使用,本脚本仅用于安装 Oracle 数据库,请提前安装好 Linux 操

额外说明

Oracle SQL 语句:查看 redo log 每小时切换次数

有时候,通过查看在线重做日志 redo log 每小时的切换次数,可以查看故障发生的时间点! SQL 语句如下: set linesize 260 pagesize 1000; col h0 for 999 col h1 for 999; col h2

额外说明

HNU-电子测试平台与工具-示波器+信号发生器的使用

该报告最后的得分为100分/100分。 作者认为可以将它发出来,为有需要的同学,特别是该大学该门科目的后继者提供帮助与解答。 如果喜欢可以点个赞哦,感谢。 班级:计XXXXXX 学号:2021XXXXXXXX 姓名:wolf 目录 1实验要求 2实验内容

额外说明

10.2注意力汇聚

原文链接 下面为学习记录: 1964年提出的Nadaraya-Watson核回归模型 是一个简单但完整的例子,可以用于演示具有注意力机制的机器学习。 1. 生成数据集 简单起见,考虑下面这个回归问题: 给定的成对的“输入-输出”数据集 { ( x 1 ,

额外说明

PHP实践:用Yconf配置扩展为项目插上性能的翅膀

-作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 -数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 -本文已收录于PHP专栏:PHP进阶实战教程。

ads via 小工具