如何在 SwiftUI 中将自定义 Binding 对象放入 #Preview?

How to put a custom Binding object in #Preview in SwiftUI?

提问人:Michael May 提问时间:11/17/2023 更新时间:11/17/2023 访问量:37

问:

Xcode 为以下代码提供错误消息“Ambiguous use of 'Preview'”:

import SwiftUI

struct TileDetailView: View {
    @Binding var tile: Tile  // This is a custom object
    @Binding var isShowingTileDetail: Bool
    
    var body: some View {
        Text("This is a tile.")
    }
}

#Preview {
    let bindingVar = Binding.constant(false)
    let aTile = AMClass(name: "A Tile")
    let bindingTile = Binding<Tile>(
        get: { aTile }
    )
    return TileDetailView(aTile: bindingTile, isShowingClassDetail: bindingVar)
}

请随时指出上述代码的问题。谢谢。

iOS Swift SwiftUI

评论

2赞 Joakim Danielson 11/17/2023
在对视图 init 的调用中直接使用 .constant(...),无需声明变量

答:

1赞 son 11/17/2023 #1

这个怎么样?可用于初始化属性。如果 the 是协议,请将其替换为任何符合 Tile 的实现类、结构等。.constant@BindingTile

#Preview {
    TileDetailView(
        tile: .constant(Tile()), //or TileImpl()
        isShowingTileDetail: .constant(false)
    )
}

enter image description here

评论

1赞 son 11/17/2023
也许您需要检查初始化函数。它应该起作用。我附上了一张图片作为输出。
0赞 Michael May 11/17/2023
谢谢,@son。是的,这行得通。我没有提到我省略了初始值设定项中的一些参数,因为它们具有默认值。但事实证明,这些参数也应该出现在 #Preview 的初始值设定项中。