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 }
            // 处理逻辑
        }
    }
}

这篇文章对你有用吗?