无法将“Binding<Int>”类型的值转换为预期的参数类型“Binding<_>”

atu*_*tri 13 swiftui

我正在尝试TabView使用以下代码在 SwiftUI 中创建一个:

@State var selection = 0

var body: some View {
    TabView(selection: $selection) {
        DataGridPage(type: "media").tabItem {
            Image(systemName: "photo.on.rectangle")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(1)

        DataGridPage(type: "files").tabItem {
            Image(systemName: "doc.on.doc")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(2)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误Cannot convert value of type 'Binding<Int>' to expected argument type 'Binding<_>'。我看到变量selection是整数,这是正确的类型,但由于某种原因警告仍然存在。

atu*_*tri 16

我解决了这个问题。问题是TabView即使闭包中存在一些错误也会显示此错误。所以创建的代码TabView是正确的,但问题是我初始化的方式DataGridPage。我将属性的名称更改type为datainside,DataGridPage但在这里我仍在使用type属性。我修复了它,它停止向我显示警告。

我认为 SwiftUI 是一个新框架,它在调试方面还有很多改进要做。我希望它将来会成熟,我们将能够指出确切的错误,而不是这种模糊的陈述。

新代码现在看起来像这样:

@State var selection = 0

var body: some View {
    TabView(selection: $selection) {
        DataGridPage(data: "media").tabItem {
            Image(systemName: "photo.on.rectangle")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(1)

        DataGridPage(data: "files").tabItem {
            Image(systemName: "doc.on.doc")
                .imageScale(.large)
                .foregroundColor(.yellow)
        }
        .tag(2)
    }
}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助面临类似问题的人。