Swift的属性

本文详细介绍了Swift中的属性,包括实例属性和类型属性。实例属性分为存储属性和计算属性,存储属性有变量和常量形式,而计算属性不存储值,通过getter和setter获取或设置值。类型属性则为整个类型共享,存储类型属性类似全局变量。文章还涉及延迟存储属性、属性观察器以及它们的使用场景和注意事项。
摘要由CSDN通过智能技术生成

在这里插入图片描述

属性分类

在Swift中, 严格意义上来讲属性可以分为两大类: 实例属性和类型属性

  • 实例属性(Instance Property): 只能通过实例去访问的属性
    • 存储实例属性(Stored Instance Property): 存储在市里的内存中, 每个实例都只有一份
  • 计算实例属性(Computed Instance Property)
  • 类型属性(Type Property): 只能通过类型去访问的属性
  • 存储类型属性(Stored Type Property): 整个程序运行过程中就只有一份内存(类似全局变量)
  • 计算类型属性(Computed Type Property)
  • 类型属性可以通过static关键字定义; 如果是类也可以通过class关键字定义
  • 实例属性属于一个特定类型的实例,每创建一个实例,实例都拥有属于自己的一套属性值,实例之间的属性相互独立
  • 为类型本身定义属性,无论创建了多少个该类型的实例,这些属性全局都只有唯一一份,这种属性就是类型属性

实例属性

上面提到Swift中相关的属性可以分为两大类:存储属性和计算属性

  • 存储属性(Stored Property)

    • 类似于成员变量,系统会为其分配内存空间,存储属性存储在实例的内存中
      存储属性可以是变量存储属性(用关键字var定义),也可以是常量存储属性(用关键字let定义)
    • 结构体和类可以定义存储属性, 枚举不可以定义存储属性
  • 计算属性(Computed Property)

    • 计算属性其本质就是方法(函数), 系统不会为其分配内存空间, 所以计算属性不会占用- 实例对象的内存
    • 计算属性不直接存储值,而是提供一个getter和一个可选的setter,来间接获取和设置其他属性或变量的值

存储属性

  • Swift中存储属性可以是var修饰的变量, 也可以是let修饰的常量
  • 但是在创建类或结构体的实例时, 必须为所有的存储属性设置一个合适的初始值, 否则会报错的
  • 可以在定义属性的时候, 为其设置一个初始值
  • 可以在init初始化器里为存储实行设置一个初始值
struct Person {
   
    // 定义的时候设置初始值
    var age: Int = 24
    var weight: Int
}
// 使用init初始化器设置初始值
var person1 = Person(weight: 75)
var person2 = Person(age: 25, weight: 80)

  • 上面两个属性是会占用实例的内存空间的
  • 可以使用MemoryLayout获取数据类型占用的内存大小
// Person结构体实际占用的内存大小
MemoryLayout<Person>.size         // 16
// 系统为Person分配的内存大小
MemoryLayout<Person>.stride       // 16
// 内存对其参数
MemoryLayout<Person>.alignment    // 8

有一种使用方式, 输出结果一致

var person = Person(weight: 75
MemoryLayout.size(ofValue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值