跳到主要内容

Swift 存储属性

在Swift中,存储属性是类或结构体中用于存储值的一部分。它们是类或结构体的基础组成部分,用于保存实例的状态。存储属性可以是常量(使用 let 声明)或变量(使用 var 声明),具体取决于它们的值是否需要更改。

什么是存储属性?

存储属性是类或结构体中直接存储值的属性。它们与计算属性不同,计算属性的值是通过计算得到的,而存储属性的值是直接存储在内存中的。

存储属性的定义

存储属性可以是常量或变量。常量存储属性使用 let 关键字声明,而变量存储属性使用 var 关键字声明。

swift
struct Person {
let name: String
var age: Int
}

在上面的例子中,name 是一个常量存储属性,而 age 是一个变量存储属性。

存储属性的初始化

存储属性必须在类或结构体的实例创建时被初始化。你可以在定义属性时直接赋值,或者在初始化方法中赋值。

swift
struct Person {
let name: String
var age: Int

init(name: String, age: Int) {
self.name = name
self.age = age
}
}

在这个例子中,nameage 属性在初始化方法中被赋值。

备注

如果存储属性在定义时没有初始值,并且没有在初始化方法中赋值,编译器会报错。

存储属性的实际应用

存储属性在实际开发中非常常见。例如,在一个表示用户的类中,你可能会使用存储属性来保存用户的姓名、年龄、电子邮件等信息。

swift
class User {
let id: Int
var name: String
var email: String

init(id: Int, name: String, email: String) {
self.id = id
self.name = name
self.email = email
}
}

在这个例子中,id 是一个常量存储属性,而 nameemail 是变量存储属性。

存储属性的访问和修改

你可以通过实例访问和修改存储属性的值。

swift
let user = User(id: 1, name: "Alice", email: "alice@example.com")
print(user.name) // 输出: Alice

user.name = "Bob"
print(user.name) // 输出: Bob

在这个例子中,我们首先创建了一个 User 实例,然后访问并修改了 name 属性的值。

警告

常量存储属性的值一旦被初始化就不能再更改。尝试修改常量存储属性会导致编译错误。

存储属性的默认值

你可以在定义存储属性时为其提供默认值。这样,即使没有在初始化方法中赋值,属性也会有初始值。

swift
struct Car {
var brand: String = "Unknown"
var year: Int = 2020
}

在这个例子中,brandyear 属性都有默认值。

存储属性的延迟初始化

有时,你可能希望某些存储属性在首次访问时才被初始化。Swift 提供了 lazy 关键字来实现这一点。

swift
class DataManager {
lazy var data: [String] = {
// 模拟从文件或网络加载数据
return ["Data1", "Data2", "Data3"]
}()
}

在这个例子中,data 属性是一个延迟初始化的存储属性。它只有在首次访问时才会被初始化。

提示

延迟初始化适用于那些初始化成本较高或可能不会立即使用的属性。

总结

存储属性是Swift中用于存储类或结构体数据的基本组成部分。它们可以是常量或变量,并且必须在实例创建时被初始化。存储属性在实际开发中非常常见,用于保存实例的状态。

附加资源

练习

  1. 创建一个表示 Book 的结构体,包含 titleauthoryear 三个存储属性。
  2. 修改 Book 结构体,使 year 属性有一个默认值 2023
  3. 创建一个 Library 类,包含一个延迟初始化的存储属性 books,用于存储书籍列表。

通过完成这些练习,你将更好地理解存储属性的概念及其在实际开发中的应用。