在 Xcode 15.0.1 中使用 #Preview 出现不明确使用“init(_:traits:body:)”错误

问题描述 投票:0回答:1

我使用新的 #Preview 语法为视图创建了预览,但收到错误

Amibiguous use of 'init(_:traits:body:)'
:

#Preview {
    let viewModel = RecordingDetailViewModel(recording: nil, viewContext: PersistenceController.preview.container.viewContext)
    TranscribingTransitionView(viewModel: viewModel)
}

我尝试了一些方法来解决这个问题,例如按照建议添加

return
这里。有时,当我构建项目时,错误会消失(并且它总是在模拟器上构建并运行得很好),但一旦我取消暂停预览,错误就会回来。

即使我切换回旧语法,即使错误出现在不再存在的宏扩展中,我仍然会收到错误:

struct TranscribingTransitionView_Previews: PreviewProvider {
  static var previews: some View {
    let viewModel = RecordingDetailViewModel(recording: nil, viewContext: PersistenceController.preview.container.viewContext)
    TranscribingTransitionView(viewModel: viewModel)
  }
}
swift preview
1个回答
0
投票

#Preview
宏仅支持其主体中的单个视图。因此,在您的具体示例中,失败是由于
let
造成的。因此,如果您只是内联该定义,它将起作用:

#Preview {
    TranscribingTransitionView(
        viewModel: RecordingDetailViewModel(
            recording: nil,
            viewContext: PersistenceController.preview.container.viewContext
        )
    )
}

如果您需要多个视图,您可以通过将其全部包装在某种堆栈中来解决此限制:

#Preview {
    ZStack {
        let viewModel = //...
        TranscribingTransitionView(viewModel: viewModel)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.