SwiftUI中如何将Scene的.commands语句移至独立函数?
解决SwiftUI中.commands移至独立函数的错误
你遇到的错误是因为onSetMainMenu()函数默认返回Void(也就是()),但.commands闭包需要的是符合Commands协议的内容。要修复这个问题,只需要给函数加上正确的返回类型和构建器属性:
正确实现代码
@main struct MyApp: App { var body: some Scene { WindowGroup { ContentView() .onAppear { //Code that runs when app is shown } } .commands { onSetMainMenu() } } // 添加@CommandsBuilder,让多个CommandGroup自动组合成Commands类型 @CommandsBuilder func onSetMainMenu() -> some Commands { CommandGroup(replacing: .appInfo) { //code here... } CommandGroup(replacing: .appTermination) { //code here... } CommandGroup(before: .saveItem) { //code here } } }
关键修改点
- 给函数添加
@CommandsBuilder属性:这个属性是SwiftUI提供的,能让函数里的多个CommandGroup自动组合成一个符合Commands协议的对象 - 把函数返回类型改为
some Commands:明确告诉编译器这个函数返回的是符合Commands协议的内容,而不是默认的Void
这样修改后,.commands闭包就能正确识别函数返回的内容,错误就会消失。
内容的提问来源于stack exchange,提问作者c00000fd
相关产品推荐
相关产品推荐

