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

SwiftUI PreviewProvider中如何为可选Void类型函数传nil或占位函数?

解决方案

1. 允许传递nil的正确方式

你的Toolbar中closeThisView的类型是() -> Void?(返回可选Void的函数),并非可选的函数类型,所以直接传nil会报错。如果需要支持传递nil,请修改参数定义为可选函数类型:

struct Toolbar: View {
    // 改为可选函数类型:(() -> Void)?
    let closeThisView: (() -> Void)?
    var toolbarTitle: String
    
    var body: some View {
        Text("bla")
    }
}

修改后,预览里就能直接传nil了:

struct Toolbar_Previews: PreviewProvider {
    static var previews: some View {
        Toolbar(closeThisView: nil, toolbarTitle: "comments")
            .preferredColorScheme(.dark)
    }
}

2. 不修改Toolbar定义,传递空函数

如果不想修改Toolbar的参数类型,只需传递一个符合() -> Void?类型的空函数即可,比如返回nil或空的可选Void:

struct Toolbar_Previews: PreviewProvider {
    static var previews: some View {
        // 方式1:返回nil的闭包
        Toolbar(closeThisView: { nil }, toolbarTitle: "comments")
        // 方式2:返回空可选Void的闭包
        // Toolbar(closeThisView: { () }, toolbarTitle: "comments")
            .preferredColorScheme(.dark)
    }
}

3. 你的第二个写法的问题

你尝试的预览代码存在两个问题:

  • PreviewProvider的previews是静态方法,无法访问实例方法closeThisView
  • @Environment(\.dismiss)只能在View结构体中使用,PreviewProvider不是View,无法获取该环境值

如果想在预览中传递一个实际有逻辑的函数(虽然预览不会执行),可以直接在闭包里写空逻辑:

struct Toolbar_Previews: PreviewProvider {
    static var previews: some View {
        Toolbar(closeThisView: {
            // 空逻辑,预览不会执行
            print("关闭视图")
            return nil
        }, toolbarTitle: "comments")
            .preferredColorScheme(.dark)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:07