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

SwiftUI如何将PostRow中的post.id传递给CommentsViewModel的getComments方法

解决方案

步骤1:修改CommentsViewModel初始化逻辑

调整init方法,拿到传入的post后直接用对应id调用getComments,替换原有CommentsViewModel的init代码:

init(post: PostModel? = nil) {
    self.post = post
    if let postId = post?.id {
        getComments(id: postId)
    }
}

步骤2:修改CommentsView初始化逻辑,给ViewModel传参

给CommentsView新增自定义init方法,将接收的post参数传递给CommentsViewModel,替换原有CommentsView的属性声明代码:

struct CommentsView: View {
    var post: PostModel
    @StateObject var commentsData: CommentsViewModel
    
    // 新增自定义初始化方法
    init(post: PostModel) {
        self.post = post
        _commentsData = StateObject(wrappedValue: CommentsViewModel(post: post))
    }

    // 原有ScrollView等业务代码保持不变
}

可选优化方案

如果需要避免在ViewModel初始化阶段执行数据请求,可将getComments调用移到视图生命周期触发:

  1. 先删除CommentsViewModel的init方法里的getComments调用
  2. 在CommentsView的ScrollView上添加onAppear回调:
ScrollView{
    // 原有布局代码不变
}
.onAppear {
    commentsData.getComments(id: post.id)
}

现有PostRow中打开评论页的sheet传参逻辑已经正确,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 17:12:03