You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Protocol捕获SwiftUI视图:定义含View属性的协议实现复用视图

SwiftUI 可复用复合视图协议设计

我尝试编写一个协议,要求遵循该协议的类型具备View属性,或是拥有返回some View的@ViewBuilder方法,以此实现可复用的复合视图,能够根据需要展示的数据类型构建不同的子视图。

协议定义

protocol RowView {
    var leftSide: some View { get }
    var rightSide: some View { get }
}

调用示例

struct Example: RowView {
    var id: Int
    var leftSide: some View { … }
    var rightSide: some View { … }
}

struct ContentView: View {
    let rows: [RowView]

    var body: some View {
        VStack {
            ForEach(rows, id: \.id) { row in
                HStack {
                    row.leftSide
                    row.rightSide
                }
            }
        }
    }
}

注:原代码中Foreach为拼写错误,已修正为SwiftUI标准的ForEach;同时补充闭包参数名row,提升代码可读性。

内容的提问来源于stack exchange,提问作者Mercutio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:57:16