Skip to content

if-elseswitch 逻辑移入 ViewModel

你是否觉得 SwiftUI 视图代码变得越来越臃肿?🤔 别担心!将 if-elseswitch 逻辑移入 ViewModel 是一个绝佳的解决方案,可以使你的视图代码更简洁、更易于维护。这样做不仅能提高代码的可读性,还能增强代码的可测试性。

为什么要这样做?

视图的主要职责是展示数据和响应用户交互。当视图中包含大量的条件判断逻辑时,它会变得难以理解和修改。将这些逻辑移到 ViewModel 中,可以使视图专注于其核心职责,从而提高代码的清晰度和可维护性。想象一下,你的视图不再被复杂的逻辑所困扰,是不是感觉轻松多了?🎉

  • 提高可读性: 视图代码更简洁,易于理解。
  • 增强可测试性: ViewModel 中的逻辑更容易进行单元测试。
  • 降低复杂度: 视图专注于 UI 展示,逻辑处理交给 ViewModel。

如何实现?

  1. 识别视图中的条件判断逻辑: 找到视图中所有的 if-elseswitch 语句。
  2. 将逻辑移入 ViewModel: 在 ViewModel 中创建方法或计算属性来处理这些逻辑。
  3. 在视图中调用 ViewModel 的方法或属性: 使用 ViewModel 提供的数据来更新 UI。

例如,假设你有一个显示用户状态的视图,根据用户的状态显示不同的文本。你可以将这个逻辑移入 ViewModel:

swift
class UserViewModel: ObservableObject {
    @Published var userStatus: String = "active"

    var statusText: String {
        switch userStatus {
        case "active":
            return "用户在线"
        case "inactive":
            return "用户离线"
        default:
            return "未知状态"
        }
    }
}

然后在视图中,你可以这样使用:

swift
struct UserView: View {
    @ObservedObject var viewModel = UserViewModel()

    var body: some View {
        Text(viewModel.statusText)
    }
}

示例分析

假设你有一个电商应用,需要根据商品库存状态显示不同的 UI。如果库存大于 10,显示“有货”;如果库存小于等于 10 且大于 0,显示“库存紧张”;如果库存为 0,显示“已售罄”。

  • 原始代码(视图):
swift
struct ProductView: View {
    let stock: Int

    var body: some View {
        if stock > 10 {
            Text("有货")
        } else if stock > 0 {
            Text("库存紧张")
        } else {
            Text("已售罄")
        }
    }
}
  • 重构后的代码(ViewModel):
swift
class ProductViewModel: ObservableObject {
    let stock: Int

    init(stock: Int) {
        self.stock = stock
    }

    var stockStatusText: String {
        if stock > 10 {
            return "有货"
        } else if stock > 0 {
            return "库存紧张"
        } else {
            return "已售罄"
        }
    }
}
  • 重构后的代码(视图):
swift
struct ProductView: View {
    @ObservedObject var viewModel: ProductViewModel

    init(stock: Int) {
        self.viewModel = ProductViewModel(stock: stock)
    }

    var body: some View {
        Text(viewModel.stockStatusText)
    }
}

通过这种方式,你将复杂的 if-else 逻辑从视图中移到了 ViewModel 中,使视图代码更加简洁明了。🎉

总结

if-elseswitch 逻辑移入 ViewModel 是一个非常有效的重构技巧,可以显著提高 SwiftUI 代码的可维护性和可测试性。记住,保持视图的简洁,让 ViewModel 处理复杂的逻辑,你的代码将会更加优雅和高效!🚀 试试看,你会发现它带来的好处!

本站使用 VitePress 制作