SwiftUI 开发指南

共 1712字,需浏览 4分钟

 ·

昨天


我是如何用 SwiftUI 做产品的:一些真实经验

很多人问我,SwiftUI 到底好不好用?值不值得投入?

如果只回答一句话:SwiftUI 不是更简单,而是更“纯粹”。


它迫使你理解“状态”与“结构”。

如果你不理解,你会很痛苦;

如果你理解了,它会非常强。

这篇文章不讲基础语法,而是讲我在真实产品开发中踩过的坑,以及后来形成的一些原则。


一、SwiftUI 的本质不是 UI,而是状态

很多人把 SwiftUI 当成“更简单的 UIKit”。

这是第一层误解。


SwiftUI 的核心不是“视图”,而是:


状态变化 → 视图重新计算


一切问题都围绕这件事。


当你发现界面莫名刷新、列表乱跳、动画卡顿、导航异常,本质都是:

状态管理失控。


我早期写代码时,经常把所有状态塞进 View 里。

结果是:

  • body 超过 300 行
  • 任何修改都会引发连锁刷新

后来我开始强制自己做一件事:


让 View 只负责展示,让状态集中管理。

二、不要把业务逻辑写在 View 里

SwiftUI 很容易诱导你这样写:


Button("Save") {
    if input.count > 5 {
        model.save()
    }
}

这看起来很方便,但随着项目变大,逻辑会迅速失控。

我的经验是:

  • View 只做触发
  • 判断逻辑放进 ViewModel
  • 数据处理放进 Service


分层之后,整个项目稳定性会明显提升。

SwiftUI 的“轻松感”会让人放弃结构,但产品一定需要结构。


三、NavigationStack 是第二个大坑

如果你做过复杂应用,一定遇到:

  • 返回层级异常
  • 深层页面 pop 失败
  • 路径状态丢失

SwiftUI 的导航是状态驱动的,而不是控制器驱动的。


我的经验:

  • 永远用 NavigationPath 管理路由
  • 不要在子页面直接 push
  • 所有跳转集中在一个 Router


当你把导航当成“数据”,问题就会少很多。



四、动画和性能不是免费的

SwiftUI 的动画非常好用,但也非常危险。

一开始我几乎所有状态都加 .animation(),后来发现:

  • 列表卡顿
  • 滚动掉帧
  • 复杂视图反复重绘


SwiftUI 每次状态变化都会重新计算 body。

如果层级深、依赖多,代价非常大。


后来我形成了一个习惯:

  • 大视图拆小
  • 只给必要状态加动画
  • 用 EquatableView 控制刷新


SwiftUI 性能问题,90% 来自“过度状态依赖”。


五、设计系统是救命工具

当产品开始多模块时,如果没有统一设计系统,你会非常痛苦。


我后来建立了:

  • 统一间距系统
  • 统一字体层级
  • 统一颜色 Token
  • 统一阴影和圆角


这样做的好处是:

  • UI 一致
  • 改主题容易
  • 不会到处写 magic number


SwiftUI 的声明式写法非常适合设计系统化。


六、SwiftUI 最大的优点:迭代速度

真正让我坚持 SwiftUI 的原因只有一个:


迭代快到不可思议。

在 UIKit 时代,一个交互改动可能涉及:

  • 控制器
  • 约束
  • 代理
  • 数据刷新

在 SwiftUI 里,改一个状态,UI 自动响应。


对于独立开发者来说,这种速度就是竞争力。



七、不要神化 SwiftUI

它不是完美的。

你会遇到:

  • 奇怪的布局 bug
  • 版本兼容问题
  • macOS 和 iOS 差异
  • 某些 API 不完整


有些时候,UIKit 仍然更稳定。


真正成熟的做法是:

SwiftUI 为主,必要时桥接 UIKit。

而不是极端选择。



八、我对 SwiftUI 的理解

写了一段时间之后,我意识到:

SwiftUI 不是一个 UI 框架。

它是一种“结构表达方式”。


你写的不是界面,而是:

  • 数据关系
  • 状态流向
  • 依赖结构


如果结构清晰,SwiftUI 会非常优雅。

如果结构混乱,SwiftUI 会让你痛苦。


九、给新手的建议

  1. 不要一上来就做复杂项目
  2. 学会状态流,而不是学 modifier
  3. 早点建立分层结构
  4. 不要让 body 超过 150 行
  5. 永远控制状态数量


最重要的一点:

SwiftUI 是长期主义的框架。

它奖励结构化思维,而不是技巧。


结语

如果让我重新选择,我仍然会用 SwiftUI 做产品。

不是因为它简单,而是因为它让产品和结构天然绑定。

当你理解“状态即驱动”之后,


你会发现:

SwiftUI 写的不是 UI,

而是一个活着的系统。

浏览 1
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报