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

Swift错误‘Extra trailing closure passed in call’解析及代码问题求助

问题解析与解决

错误原因

你遇到的「Extra trailing closure passed in call」错误本质是:你给一个完全不接受闭包参数的函数,强行传了尾随闭包。

看你AuthViewModel里的fetchUser函数定义:

func fetchUser() {
    guard let uid = userSession?.uid else { return }
    
    COLLECTION_USERS.document(uid).getDocument { snapshot, _ in
        guard let user = try? snapshot?.data(as: User.self) else { return }
        self.currentUser = user
    }
}

这个函数的参数列表是空的,没有定义任何闭包类型的参数,所以调用时根本不能加{ user in ... }这种尾随闭包。

另外还有个逻辑问题:你当前调用fetchUser是想获取每个帖子对应的uid的用户,但原fetchUser函数的作用是获取当前登录用户,和你的需求完全不匹配,这也是你误用闭包的根源。

解决方法

针对「根据帖子uid获取对应用户」的需求,正确的做法是新增一个带参数的用户获取函数,而不是修改原有的fetchUser:

步骤1:在AuthViewModel中新增根据uid获取用户的方法

// AuthViewModel里添加这个函数
func fetchUser(withUid uid: String, completion: @escaping (User?) -> Void) {
    COLLECTION_USERS.document(uid).getDocument { snapshot, error in
        if let error = error {
            print("获取用户失败:\(error.localizedDescription)")
            completion(nil)
            return
        }
        let user = try? snapshot?.data(as: User.self)
        completion(user)
    }
}

步骤2:在FeedCellViewModel中正确调用

把原来错误的调用替换成新函数:

func fetchPosts() {
    service.fetchPosts { posts in
        self.posts = posts
        
        for i in 0 ..< posts.count {
            let uid = posts[i].uid
            
            // 调用新增的带uid参数的方法
            self.authViewModel.fetchUser(withUid: uid) { user in
                self.posts[i].user = user
            }
        }
    }
}

额外说明

如果你确实需要用闭包回调的方式获取当前登录用户,可以修改原fetchUser函数让它支持闭包,但这和你当前的需求无关:

// 修改原fetchUser支持闭包
func fetchUser(completion: @escaping (User?) -> Void) {
    guard let uid = userSession?.uid else { 
        completion(nil)
        return 
    }
    
    COLLECTION_USERS.document(uid).getDocument { snapshot, _ in
        let user = try? snapshot?.data(as: User.self)
        self.currentUser = user
        completion(user)
    }
}
// 调用方式
authViewModel.fetchUser { user in
    // 处理当前登录用户数据
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:20:21