Исправление ошибки SwiftUI «Не удалось преобразовать значение типа« Binding <int>»в ожидаемый тип« Binding <_>? »» - PullRequest
0 голосов
/ 01 марта 2020

У меня проблема с этой ошибкой:

"Невозможно преобразовать значение типа 'Binding' в ожидаемый тип 'Binding <_>?'"

Я думаю, что я пишу в устаревшей версии SwiftUI, но я не уверен на 100%, поэтому любая помощь, которую я могу получить, будет потрясающей.

Я показал мой код внизу, чтобы вы могли посмотреть в этом.

Я не уверен, имеет ли значение нижняя часть, но я добавил это просто для безопасности.

ContentView

import SwiftUI

struct ContentView: View {
    @State private var selection = 0
    @State var networkManager = NetworkManager()
    var body: some View {
        TabView(selection: $selection){

            NavigationView{
            Text("First View")
                .font(.title)
                    .navigationBarTitle(Text("Welcome"))
                }
                .tabItem {
                    VStack {
                        Image(systemName: "star.fill")
                        Text("Welcome")
                    }
                }
                .tag(0)
            NavigationView{

                List(networkManager.featureList.results.identified(by: \.url)) { featured in
                Text(featured.name.capitalized)
                }
                    .navigationBarTitle(Text("Featured"))
                }
                .tabItem {
                    VStack {
                        Image(systemName: "app.badge.fill")
                        Text("Featured")
                    }
                }
                .tag(1)
            NavigationView{
            Text("First View")
                .font(.title)
                    .navigationBarTitle(Text("Repos"))
                }
            .tabItem {
                VStack {
                    Image(systemName: "rectangle.stack.fill")
                    Text("Repos")
                }
            }
            .tag(2)
            NavigationView{
            Text("First View")
                .font(.title)
                    .navigationBarTitle(Text("Request"))
                }
            .tabItem {
                VStack {
                    Image(systemName: "icloud.and.arrow.down.fill")
                    Text("Request")
                }
            }
            .tag(3)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

ApiView

import Foundation
import SwiftUI
import Combine

class NetworkManager: ObservableObject {
    var didChange = PassthroughSubject<NetworkManager, Never>()
    var featureList = FeaturedApiList(results: []){
        didSet{
            didChange.send(self)
        }
    }

    init(){
        guard let url = URL(string: "https://myurl.com/repos.json") else { return }
        URLSession.shared.dataTask(with: url) { (data, _, _) in
            guard let data = data else { return }
            let featureList = try! JSONDecoder().decode(FeaturedApiList.self, from: data)
            DispatchQueue.main.async {
                self.featureList = featureList

            }
        }.resume()
    }
}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

Показанная ошибка очень запутанная, но некоторые другие ошибки могут привести к такого рода ошибкам.

В вашем случае вам может потребоваться исправить вторую NavigationView в TabView:

            NavigationView{
                //↓Fix this line.
                List(networkManager.featureList.results, id: \.url) { featured in
                    Text(featured.name.capitalized)
                }
                .navigationBarTitle(Text("Featured"))
            }
            .tabItem {
                VStack {
                    Image(systemName: "app.badge.fill")
                    Text("Featured")
                }
            }
            .tag(1)

Лучше проверьте эту ветку и всегда старайтесь найти самые свежие образцы или учебные пособия.

0 голосов
/ 01 марта 2020

Добро пожаловать в Stackoverflow!

OOPer на самом деле правильно. Вам нужно будет починить List. Давайте попробуем заменить ваши данные на List просто чтобы увидеть, что проект скомпилируется:

Предположим, у нас есть модель, соответствующая протоколу Identifiable, например:

struct Person: Identifiable {
    var id = UUID()
    var name: String
}

А затем замените List строку следующим:

List([Person(name: "fafa")]) { featured in
    Text(featured.name)
}

На этот раз она должна работать. Поскольку SwiftUI является новым, это должно быть причиной, по которой ошибка довольно запутанная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...