SwiftUI中的类与结构体
基本概念
Swift中类与结构体的基本概念和区别。
- Name
结构体(struct)
- Type
- struct
- Description
- 值类型
- 默认成员初始化器
- 不支持继承
- 适合简单数据类型
- Name
类(class)
- Type
- class
- Description
- 引用类型
- 需要自定义初始化器
- 支持继承
- 适合复杂对象
类与结构体示例
// 结构体示例
struct Person {
var name: String
var age: Int
}
// 类示例
class Animal {
var name: String
var species: String
init(name: String, species: String) {
self.name = name
self.species = species
}
}
// 继承示例
class Dog: Animal {
var breed: String
init(name: String, breed: String) {
self.breed = breed
super.init(name: name, species: "Dog")
}
}
SwiftUI中的应用
在SwiftUI中使用类与结构体的常见场景。
- Name
视图定义
- Type
- views
- Description
- View协议
- 视图结构体
- 状态管理
- 生命周期
- Name
数据模型
- Type
- models
- Description
- 模型定义
- 数据绑定
- 状态更新
- 观察者模式
SwiftUI应用示例
// 视图结构体
struct ContentView: View {
@State private var user = User(name: "张三", age: 25)
var body: some View {
VStack {
Text("用户名: \(user.name)")
Text("年龄: \(user.age)")
Button("增加年龄") {
user.age += 1
}
}
}
}
// 数据模型类
class UserViewModel: ObservableObject {
@Published var users: [User] = []
func addUser(_ user: User) {
users.append(user)
}
}
属性与方法
类与结构体中的属性和方法定义。
- Name
属性类型
- Type
- properties
- Description
- 存储属性
- 计算属性
- 属性观察器
- 类型属性
- Name
方法类型
- Type
- methods
- Description
- 实例方法
- 类型方法
- mutating方法
- 继承与重写
属性与方法示例
struct Temperature {
// 存储属性
var celsius: Double
// 计算属性
var fahrenheit: Double {
get {
celsius * 9/5 + 32
}
set {
celsius = (newValue - 32) * 5/9
}
}
// 方法
mutating func reset() {
celsius = 0
}
// 类型方法
static func convertToFahrenheit(_ celsius: Double) -> Double {
return celsius * 9/5 + 32
}
}
最佳实践
类与结构体使用的推荐做法。
- Name
选择建议
- Type
- recommendations
- Description
- 值类型vs引用类型
- 继承vs组合
- 访问控制
- 内存管理
- Name
常见问题
- Type
- issues
- Description
- 循环引用
- 内存泄漏
- 线程安全
- 性能优化
最佳实践示例
// 使用结构体的场景
struct Point {
var x: Double
var y: Double
}
// 使用类的场景
class DataManager {
static let shared = DataManager()
private init() {}
weak var delegate: DataManagerDelegate?
func fetchData() {
// 数据获取逻辑
}
}
// 避免循环引用
class ViewController {
var completion: (() -> Void)?
func setupClosure() {
completion = { [weak self] in
guard let self = self else { return }
// 处理逻辑
}
}
}