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

Swift 中的 willSet 和 didSet

Swift学习 额外说明

收录于:42天前

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"

. . .

相关推荐

额外说明

如果启动前端npm run dev,就会出现错误。

本文主要解决问题:若依前端npm run dev启动时报错,解决办法。 目录 1、第1种解决方案(亲测有效) 2、第2种解决方案(亲测有效) Error: error:0308010C:digital envelope routines::unsuppo

额外说明

Vue-Electron打包.exe桌面程序

Electron+Vue打包.exe桌面程序 为了不报错 卸载以前的脚手架 npm uninstall -g vue-cli 安装最新版脚手架 cnpm install -g @vue/cli 创建一个 vue 随便起个名 vue create

额外说明

【实战项目】基于JavaWeb的云端书城系统

目录 前台功能模块: 注册登陆:用户可以注册新账号,并使用已有账号进行登陆。 浏览模块:用户可以浏览图书的详细信息,包括书名、作者、价格等。 查询模块:用户可以根据关键词或类目进行图书的搜索和查询。 购物车模块:用户可以将心仪的图书添加到购物车中,并管理

额外说明

数据库总结/个人总结

目录 数据库 数据和信息 Data数据 数据库 数据库管理系统 总结 常见的数据库管理系统 关系型数据库 连接查询 交叉连接、笛卡尔积 内连接 左连接 右连接 嵌套查询 Jar 在Java项目中使用.jar文件 JDBC 核心接口 单表查询 SQL注入

额外说明

JVM堆溢出实践

本次在eclipse中实践本异常: 通过无终止的在队中创建对象,以制造堆溢出的情况。 虚拟机参数设置:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError 将最大内存和最小内存设为相等是为了避免虚拟机自动扩展对内

额外说明

eclipse配置tomcat

可以对照下图 这样就成功了

额外说明

【linux】linux 命令:ip/ifcongif 命令 —— 查看服务器网络信息

目录 一、ip 命令查看网络信息 二、ifconfig 命令查看网络信息 一、ip 命令查看网络信息 (1)输入命令查看网卡信息,找到网卡名称,可以看到该网卡已经分配到IP地址,输入命令: ip addr   (2)查看网络统计信息,输入命令: ip l

额外说明

系统因缺失atmfd.dll程序无法运行如何解决?

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个atmfd.dll文件(挑选

额外说明

如何在WordPress中轻松替换图像和媒体文件

您是否尝试过替换在 WordPress 中上传的图片?如果这样做,那么您可能必须上传一个新文件,重命名它,然后将其插入帖子中,同时替换旧文件。现在,如果您只需点击几下鼠标就可以完成所有这些,不是很好吗?在本文中,我们将向您展示如何轻松替换 WordPre

ads via 小工具