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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:23:11