Невозможно преобразовать значение типа Binding <Int> в ожидаемый тип аргумента Binding <_>.

10

Я пытаюсь создать 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)
    }
}

Но я получаю ошибку Cannot convert value of type 'Binding<Int>' to expected argument type 'Binding<_>'. Я вижу, что переменная selectionявляется целым числом, который является правильным типом, но предупреждение по-прежнему там по какой-то причине.

atulkhatri
источник

Ответы:

9

Я понял проблему. Дело в том, что TabViewпоказывает эту ошибку, даже если в закрытии есть какая-то ошибка. Так что код создания TabViewправильн, но проблема в том, как я инициализирую DataGridPage. Я поменял название недвижимостиtype на dataвнутреннее, 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)
    }
}

Надеюсь, что это помогает кому-то, сталкивающемуся с подобной проблемой.

atulkhatri
источник
1
Имел ту же проблему и мог решить ее сейчас. Спасибо
gurehbgui
Моя проблема казалась похожей, но я не помнил, чтобы построить свою точку зрения (скобки). Так что я сделал DataGridPage.tabItem {... вместо DataGridPage (). TabItem {... В моем случае представление не принимало никаких параметров в конструкторе.
Два