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

Xcode 15中如何在#Preview宏内使用let常量?

解决Xcode 15中#Preview宏使用let变量时的歧义错误问题

你遇到的问题源于#Preview宏与旧版PreviewProvider的闭包语法解析规则差异:

  • 旧版PreviewProvider的previews属性闭包属于多语句代码块,Swift会自动将最后一行表达式作为返回值,因此先声明变量再写View的写法能正常工作。
  • 但#Preview宏的闭包默认期望直接返回View实例,当你在闭包里先声明let变量再写View时,Swift会将闭包解析为多语句代码块,此时最后一行的CategoryView初始化结果未被显式返回,导致宏无法正确匹配对应的初始化方法,进而触发「Ambiguous use of 'init(_:traits:body:)'」的歧义错误,同时出现「Result of 'CategoryView' initializer is unused」的警告。

解决办法

方法1:显式返回View实例

在闭包中添加return关键字,明确指定要返回的View:

#Preview {
    let categories = Bundle.main.decode([Category].self, from: "Items.json")
    return CategoryView(category: categories[0])
}

方法2:用立即执行闭包包裹逻辑

将变量声明和View初始化放在立即执行闭包内,让整个表达式直接返回View:

#Preview {
    ({
        let categories = Bundle.main.decode([Category].self, from: "Items.json")
        return CategoryView(category: categories[0])
    })()
}

两种方法都能让#Preview宏正确识别要展示的View,解决歧义错误与警告问题。

内容的提问来源于stack exchange,提问作者Sébastien REMY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:27:35