news 2026/10/11 1:38:39

swiftui-ui-patterns - lightweight-clients

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
swiftui-ui-patterns - lightweight-clients

轻量客户端(基于闭包)

使用此模式让网络或服务依赖保持简单且可测试,而无需引入完整的视图模型或重量级 DI 框架。它非常适合 SwiftUI 应用:你希望有一个小巧、可组合的 API 表面,并能在预览/测试中替换。

意图

  • 提供一个由异步闭包构成的小型"客户端"类型。
  • 将业务逻辑保留在 store 或功能层中,而不是视图中。
  • 便于在预览/测试中打桩。

最小形态

structSomeClient{varfetchItems:(_limit:Int)asyncthrows->[Item]varsearch:(_query:String,_limit:Int)asyncthrows->[Item]}extensionSomeClient{staticfunclive(baseURL:URL=URL(string:"https://example.com")!)->SomeClient{letsession=URLSession.sharedreturnSomeClient(fetchItems:{limitin// build URL, call session, decode},search:{query,limitin// build URL, call session, decode})}}

用法模式

@MainActor@ObservablefinalclassItemsStore{enumLoadState{caseidle,loading,loaded,failed(String)}varitems:[Item]=[]varstate:LoadState=.idleprivateletclient:SomeClientinit(client:SomeClient){self.client=client}funcload(limit:Int=20)async{state=.loadingdo{items=tryawaitclient.fetchItems(limit)state=.loaded}catch{state=.failed(error.localizedDescription)}}}
structContentView:View{@Environment(ItemsStore.self)privatevarstorevarbody:someView{List(store.items){iteminText(item.title)}.task{awaitstore.load()}}}
@mainstructMyApp:App{@Stateprivatevarstore=ItemsStore(client:.live())varbody:someScene{WindowGroup{ContentView().environment(store)}}}

指导

  • 将解码和 URL 构建保留在客户端中;将状态变化保留在 store 中。
  • 让 store 在init中接受客户端并将其保持为 private。
  • 避免全局单例;使用.environment注入 store。
  • 如果需要多种变体(mock/stub),添加static func mock(...)。

陷阱

  • 不要把 UI 状态放在客户端中;将状态保留在 store 中。
  • 不要在客户端闭包中捕获self或视图状态。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 1:38:00

具身智能创新原理(173):一种基于TVA的因果推理与反事实学习数学框架

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

作者头像 李华
网站建设 2026/10/11 1:37:54

Skill (重点)、Tool和 Harness分别是什么?该如何配合使用

Skill 和Tool分别是什么,通俗类比Function‑call / Tool:是单个工具原子,比如调用百度搜索、调用数据库,相当于「扳手、螺丝刀」单个工具。Skill:一套完整业务操作手册 流程 SOP,相当于一本完整维修说明书…

作者头像 李华
网站建设 2026/10/11 1:37:37

小红书 AI 创作工具怎么选,多款工具实际使用情况整理

做小红书账号运营时,经常会遇到选题枯竭、标题打磨耗时长、文案调性不对、排版调整繁琐等问题。不同小红书创作工具,在选题挖掘、文案润色、标题生成、违禁词检测、排版预览、批量产出能力上存在明显区别。下文客观记录五款小红书相关工具的基础能力与使…

作者头像 李华