我使用新的 #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)
}
}
#Preview
宏仅支持其主体中的单个视图。因此,在您的具体示例中,失败是由于 let
造成的。因此,如果您只是内联该定义,它将起作用:
#Preview {
TranscribingTransitionView(
viewModel: RecordingDetailViewModel(
recording: nil,
viewContext: PersistenceController.preview.container.viewContext
)
)
}
如果您需要多个视图,您可以通过将其全部包装在某种堆栈中来解决此限制:
#Preview {
ZStack {
let viewModel = //...
TranscribingTransitionView(viewModel: viewModel)
}
}