【问题标题】:SwiftUI Bug Fix "Cannot convert value of type 'Binding<int>'to expected type 'Binding<_>?'"SwiftUI 错误修复“无法将 'Binding<int>' 类型的值转换为预期类型 'Binding<_>?'”
【发布时间】:2020-03-01 04:59:24
【问题描述】:

我遇到了这个错误:

“无法将 'Binding' 类型的值转换为预期的 'Binding<_> 类型?'”

我认为我正在使用过时版本的 SwiftUI 进行编码,但我不能 100% 确定,所以我能得到的任何帮助都会很棒。

我在下面显示了我的代码,以便您查看。

我不确定底部是否重要,但我添加它只是为了安全。

内容视图

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()
    }
}

谢谢!

【问题讨论】:

    标签: ios swift xcode swiftui


    【解决方案1】:

    显示的错误非常令人困惑,但其他一些错误会导致此类错误。

    在您的情况下,您可能需要修复TabView 中的第二个NavigationView

                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)
    

    最好查看this thread 并始终尝试查找最新的示例或教程。

    【讨论】:

      【解决方案2】:

      欢迎来到 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 是新的,这一定是错误相当混乱的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        相关资源
        最近更新 更多