SwiftUI 错误修复“无法将 'Binding<int>' 类型的值转换为预期类型 'Binding<_>?'”

Posted

技术标签:

【中文标题】SwiftUI 错误修复“无法将 \'Binding<int>\' 类型的值转换为预期类型 \'Binding<_>?\'”【英文标题】: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()
    

谢谢!

【问题讨论】:

【参考方案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】:

欢迎来到 ***!

OOPer 实际上是正确的。您将需要修复您的List。 让我们尝试将您的数据替换为List,以查看项目是否会编译:

假设我们有一个符合Identifiable 协议的模型,如下所示:

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

然后将您的 List 行替换为:

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

这一次它应该运行。由于 SwiftUI 是新的,这一定是错误相当混乱的原因。

【讨论】:

以上是关于SwiftUI 错误修复“无法将 'Binding<int>' 类型的值转换为预期类型 'Binding<_>?'”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复适用于 SwiftUI 中文本的动画制作帧问题/错误?

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

在连接的设备上构建和运行带有 Firebase 框架错误的 swiftUI ios 应用程序的修复方法是啥?

SwiftUI 如何修复“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”

无法将“Binding<String?>”类型的值转换为预期的参数类型“Binding<String>”[重复]

SwiftUI:如何使用边距 10 修复前导和尾随