Swift 结构体学习笔记
什么是结构体
在 Swift 中,结构体是一种复合类型,可以封装多个值,这些值可以是任意类型。结构体和类非常相似,它们都可以封装属性和方法,并且可以被实例化。与类不同的是,结构体是值类型。
结构体的定义
结构体的定义使用 struct
关键字。
swiftCopy Codestruct MyStruct {
var name: String
var age: Int
}
上面的代码定义了一个名为 MyStruct
的结构体,它包含了两个属性:name
和 age
。
结构体的实例化
可以通过调用结构体的初始化函数来创建结构体的实例。
swiftCopy Codelet myStructInstance = MyStruct(name: "Tom", age: 20)
上面的代码创建了一个名为 myStructInstance
的结构体实例,并将 name
属性设置为 "Tom"
,将 age
属性设置为 20
。
结构体的访问控制
可以使用访问控制关键字来限定结构体中属性和方法的访问级别。
swiftCopy Codepublic 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 Codestruct 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
的实例方法,该方法可以访问结构体的 name
和 age
属性。在使用结构体实例时,可以调用该方法来打印结构体的信息。
结构体的静态属性和方法
结构体中也可以定义静态属性和方法,它们属于结构体类型本身而不是结构体实例。
swiftCopy Codestruct MyStruct {
static var count = 0
static func increaseCount() {
count += 1
}
}
MyStruct.increaseCount()
print(MyStruct.count) // 输出 "1"
上面的代码中,MyStruct
结构体定义了一个静态属性 count
和一个静态方法 increaseCount
。在使用结构体时,可以直接通过结构体类型调用静态属性和方法,而不需要创建结构体实例。
结构体的扩展
在 Swift 中,可以使用扩展来为结构体添加新的属性和方法。
swiftCopy Codeextension 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 中的结构体是一种轻量级的复合类型,可以封装多个值,具有访问控制、方法、静态属性和方法、扩展等特性,非常适合用于数据建模和代码组织。