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 如何修复“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”