SwiftUI Toggle 无法转换“Bool”类型的值?到预期的参数类型 'Binding<Bool>'
Posted
技术标签:
【中文标题】SwiftUI Toggle 无法转换“Bool”类型的值?到预期的参数类型 \'Binding<Bool>\'【英文标题】:SwiftUI Toggle Cannot convert value of type 'Bool?' to expected argument type 'Binding<Bool>'SwiftUI Toggle 无法转换“Bool”类型的值?到预期的参数类型 'Binding<Bool>' 【发布时间】:2021-01-23 04:51:11 【问题描述】:使用 SwiftUI,我正在尝试设置切换值,但它告诉我
Cannot convert value of type 'Bool?' to expected argument type 'Binding<Bool>'
我从服务器获取数据,并解码 json 创建我的模型获取数据成功,
但是当我想更改 Toggle 时,会出现错误。
我的代码:
struct content: View
@ObservedObject var articles = Article()
var body: some View
VStack
List
ForEach(articles.article, id: \.id)article in
NavigationLink(destination: DetailView())
ListContent(article: article)
struct ListContent: View
var article: Article
var body: some View
HStack
VStack (alignment: .leading)
Toggle("", isOn: self.article.isActive)
.onChange(of: self.article.isActive) value in
print(value)
.padding(.leading,10)
Spacer(minLength: 0)
我不能在我的代码中使用 self.article.isActive 恐怕我做错了什么,或者我不明白 Toggle 如何与 isOn 一起工作。
欢迎任何帮助或解释!谢谢。
【问题讨论】:
【参考方案1】:您需要将 Binding 变量传递给 Toggle 的 'isOn' 参数。我假设,你的 'Article' 的 'isActive' 变量具有 Bool 类型。
Toggle(model.title, isOn: Binding<Bool>(
get: model.isActive ,
set:
// $0 is the new Bool value of the toggle
// Your code for updating the model, or whatever
print("value: \($0)")
)
模型示例,以防万一
struct ToggleModel: Hashable
init(id: Int, title: String, isActive: Bool)
self.id = id
self.title = title
self.isActive = isActive
let id: Int
let title: String
let isActive: Bool
您可以在此处找到工作代码示例:https://github.com/yellow-cap/toggle-list-swiftui/blob/master/SwiftUIToggleListExample/SwiftUIToggleListExample/ContentView.swift
【讨论】:
谢谢你,我成功了!以上是关于SwiftUI Toggle 无法转换“Bool”类型的值?到预期的参数类型 'Binding<Bool>'的主要内容,如果未能解决你的问题,请参考以下文章
Core Data + SwiftUI:无法将“Bool”类型的值转换为预期的参数类型“Binding<Bool>”