Swift 结构体学习笔记

什么是结构体

在 Swift 中,结构体是一种复合类型,可以封装多个值,这些值可以是任意类型。结构体和类非常相似,它们都可以封装属性和方法,并且可以被实例化。与类不同的是,结构体是值类型。

结构体的定义

结构体的定义使用 struct 关键字。

swiftCopy Code
struct MyStruct { var name: String var age: Int }

上面的代码定义了一个名为 MyStruct 的结构体,它包含了两个属性:nameage

结构体的实例化

可以通过调用结构体的初始化函数来创建结构体的实例。

swiftCopy Code
let myStructInstance = MyStruct(name: "Tom", age: 20)

上面的代码创建了一个名为 myStructInstance 的结构体实例,并将 name 属性设置为 "Tom",将 age 属性设置为 20

结构体的访问控制

可以使用访问控制关键字来限定结构体中属性和方法的访问级别。

swiftCopy Code
public struct MyStruct { private var name: String public var age: Int public init(name: String, age: Int) { self.name = name self.age = age } }

上面的代码中,name 属性被声明为 private,只能在结构体内部访问。age 属性被声明为 public,可以在结构体外部访问。结构体的初始化函数也被声明为 public,可以在结构体外部调用。

结构体的实例方法

结构体中可以定义实例方法,这些方法可以访问结构体的属性。

swiftCopy Code
struct MyStruct { var name: String var age: Int func printInfo() { print("name: \(name), age: \(age)") } } let myStructInstance = MyStruct(name: "Tom", age: 20) myStructInstance.printInfo() // 输出 "name: Tom, age: 20"

上面的代码中,MyStruct 结构体定义了一个名为 printInfo 的实例方法,该方法可以访问结构体的 nameage 属性。在使用结构体实例时,可以调用该方法来打印结构体的信息。

结构体的静态属性和方法

结构体中也可以定义静态属性和方法,它们属于结构体类型本身而不是结构体实例。

swiftCopy Code
struct MyStruct { static var count = 0 static func increaseCount() { count += 1 } } MyStruct.increaseCount() print(MyStruct.count) // 输出 "1"

上面的代码中,MyStruct 结构体定义了一个静态属性 count 和一个静态方法 increaseCount。在使用结构体时,可以直接通过结构体类型调用静态属性和方法,而不需要创建结构体实例。

结构体的扩展

在 Swift 中,可以使用扩展来为结构体添加新的属性和方法。

swiftCopy Code
extension MyStruct { var description: String { return "name: \(name), age: \(age)" } mutating func increaseAge() { age += 1 } } var myStructInstance = MyStruct(name: "Tom", age: 20) print(myStructInstance.description) // 输出 "name: Tom, age: 20" myStructInstance.increaseAge() print(myStructInstance.age) // 输出 "21"

上面的代码中,通过扩展为 MyStruct 结构体添加了一个名为 description 的计算属性和一个名为 increaseAge 的可变方法。在使用结构体实例时,可以调用这些新添加的属性和方法。

结论

Swift 中的结构体是一种轻量级的复合类型,可以封装多个值,具有访问控制、方法、静态属性和方法、扩展等特性,非常适合用于数据建模和代码组织。