SwiftUI项目出现「向无参数调用传参」错误,求排查解决
解决SwiftUI中「Argument passed to call that takes no arguments」错误
你遇到的两次该错误,核心原因是调用视图/对象的初始化器时,传入了其未定义的参数,结合你的代码,具体问题和修复方案如下:
1. OrganizerHomePage 初始化器不匹配
你在authenticatedView和viewForUserType方法中,都使用了OrganizerHomePage(userId: session.userId ?? "")的调用方式,但如果OrganizerHomePage的定义是默认无参初始化器(未声明带userId的初始化方法),就会触发错误。
修复方式二选一:
- 若
OrganizerHomePage需要userId参数,补充带参初始化器:
struct OrganizerHomePage: View { let userId: String // 显式声明带参初始化器 init(userId: String) { self.userId = userId } // 其余视图代码 }
- 若
OrganizerHomePage无需直接传参(比如通过EnvironmentObject获取用户ID),则移除参数调用:
OrganizerHomePage().environmentObject(session)
2. EventManager 初始化器与赋值写法问题
在PoppyApp的初始化方法中,你给_eventManager赋值时的换行可能导致语法歧义,且如果EventManager未定义接受userId的初始化器,也会触发错误。
修复步骤:
首先确保EventManager支持带userId的初始化:
class EventManager: ObservableObject { let userId: String init(userId: String) { self.userId = userId } // 其余业务逻辑代码 }
然后修正PoppyApp中的赋值写法(去掉不必要换行,保证代码连贯):
init() { FirebaseApp.configure() let userId = Auth.auth().currentUser?.uid ?? "" _eventManager = StateObject(wrappedValue: EventManager(userId: userId)) }
额外检查项
- 确认
VendorHomeView、FirstView的初始化器定义与调用方式匹配,避免出现类似的参数不匹配问题; - 检查
Session类中userType、userId属性是否已正确实现并赋值,避免因属性为nil引发的间接错误。
内容的提问来源于stack exchange,提问作者Lori Gronemeyer
相关产品推荐
相关产品推荐

