美文网首页
为类、结构体以及枚举添加属性

为类、结构体以及枚举添加属性

作者: 一个栗 | 来源:发表于2021-10-05 17:45 被阅读0次

常量结构体实例的存储属性

  • 如果你创建了一个结构体的实例并且把这个实例赋给常量,你不能修改这个实例的属性,即便是声明为变量的属性。

延迟存储属性

  • 延迟存储属性的初始值在其第一次使用时才进行计算。你可以通过在其声明前标注 lazy 修饰语来表示一个延迟存储属性。
  • 如果被标记为 lazy 修饰符的属性同时被多个线程访问并且属性还没有被初始化,则无法保证属性只初始化一次。

计算属性

  • 除了存储属性,类、结构体和枚举也能够定义计算属性,而它实际并不存储值。相反,它提供一个读取器和一个可选的设置器来间接得到和设置其他的属性和值。

简写 setter

  • 如果一个计算属性的设置器没有为将要被设置的值定义一个名字,那么它将被默认命名为 newValue

简写 getter

  • 如果整个 getter 的函数体是一个单一的表达式,那么 getter 隐式返回这个表达式。

只读计算属性

  • 一个有读取器但是没有设置器的计算属性就是所谓的只读计算属性。只读计算属性返回一个值,也可以通过点语法访问,但是不能被修改为另一个值。
  • 你必须用 var 关键字定义计算属性(包括只读计算属性)为变量属性,因为它们的值不是固定的。let 关键字只用于常量属性,用于明确那些值一旦作为实例初始化就不能更改。

属性观察者

  • willSet 会在该值被存储之前被调用
  • didSet 会在一个新值被存储后被调用
  • 如果你实现了一个 willSet 观察者,新的属性值会以常量形式参数传递。你可以在你的 willSet 实现中为这个参数定义名字。如果你没有为它命名,那么它会使用默认的名字 newValue。
  • 如果你实现了一个 didSet 观察者,一个包含旧值属性值的常量形式参数将会被传递。你可以为它命名,也可以使用默认的形式参数名 oldValue。如果你在属性自己的 didSet 观察者里给自己赋值,你赋值的新值就会取代刚刚设置的值。

全局和局部变量

  • 观察属性的能力同样对全局变量和局部变量有效。全局变量是定义在任何函数、方法、闭包或者类型环境之外的变量。局部变量时定义在函数、方法或者闭包环境之中的变量。

类型属性

  • 使用 static 关键字来定义类型属性。对于类类型的计算属性类型,你可以使用 class 关键字来允许子类重写父类的实现。

相关文章

  • 为类、结构体以及枚举添加属性

    常量结构体实例的存储属性 如果你创建了一个结构体的实例并且把这个实例赋给常量,你不能修改这个实例的属性,即便是声明...

  • Swift 中为类、结构体以及枚举添加属性和方法

    为类、结构体以及枚举添加属性 储存属性 在其最简单的形式下,存储属性是一个座位特定类和结构体实例一部分的常量和变量...

  • Swift 基本语法(八)— 为类、结构体添加属性、方法

    为结构体、类、枚举添加属性,设置属性观察器。 添加方法 //属性观察器 懒加载及属性修饰符: 添加实例方法。 都默...

  • Swift学习笔记-属性

    存储属性只能用于类和结构体,计算属性可以用于类,结构体,枚举。 结构体的属性为var可变 但是如果结构体实例为le...

  • Swift 属性基本使用

    存储属性 <类 枚举 结构体> 的常量或变量(有具体存储空间) 计算属性 <类 枚举 结构体> 属性函数(无存...

  • Swift---10.属性

    属性(类,结构体或枚举中,某一个成员变量,就是该类,结构体或枚举的属性)存储属性 存在于类,结构体中,枚举中不存在...

  • Swift- Protocol

    ps:协议可以被类,结构体和枚举实现 一、添加协议属性 二、添加协议方法 三、添加构造器 四、为已有类型添加协议和...

  • 10_属性

    属性将值跟特定的类、结构或枚举关联。计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。 存储属性和计算...

  • 扩展

    为现有的类、结构体、枚举类型、协议添加了新功能。扩展可以:1、添加计算属性(get set);2、定义方法;3、提...

  • 为类、结构体以及枚举添加方法

    实例方法 实例方法是属于特定类实例、结构体实例或者枚举实例的函数。他们为这些实例提供功能性,要么通过提供访问和修改...

网友评论

      本文标题:为类、结构体以及枚举添加属性

      本文链接:https://www.haomeiwen.com/subject/upribltx.html