为什么Swift会报错「Argument passed to call that takes no arguments」
Swift报错「Argument passed to call that takes no arguments」解决方案
报错原因
你为PrimaryView自定义了无参初始化方法后,Swift 不会再为该结构体自动生成默认的带成员参数的初始化器(即init(j: String))。未自定义init时系统自动生成的成员初始化器支持你调用PrimaryView(j: i)传参构造实例,自定义无参init后该方法不存在,就会触发“调用无参数方法却传入了参数”的报错。
修复方案
根据你的业务需求选一种即可:
- 方案1:调整自定义初始化方法,接收参数并完成赋值
struct PrimaryView: View { var j: String // 自定义带参初始化方法 init(j: String) { self.j = j UITableView.appearance().backgroundColor = .blue } var body: some View { Text("Hello, world!") } }
调用处PrimaryView(j: i)不需要改动。
- 方案2:不需要外部传入
j参数时,直接修改调用代码
把ContentView里的调用代码改为PrimaryView()即可,你原本的j已经设置了默认空字符串值,不需要额外传参构造。
优化提示
UITableView.appearance()属于全局UI配置,建议放到App入口的初始化逻辑中执行,不要放在View的init方法里,避免View多次构造时重复执行无意义的全局配置代码。
内容的提问来源于stack exchange,提问作者Malachy Fernandez
相关产品推荐
相关产品推荐

