SwiftUI:列表错误无法调用非函数类型'Binding<Subject>'的值
Posted
技术标签:
【中文标题】SwiftUI:列表错误无法调用非函数类型\'Binding<Subject>\'的值【英文标题】:SwiftUI: List error Cannot call value of non-function type 'Binding<Subject>'SwiftUI:列表错误无法调用非函数类型'Binding<Subject>'的值 【发布时间】:2020-10-23 19:22:19 【问题描述】:我正在尝试在列表中添加“onMove”和“onDelete”操作,但出现以下错误:
这是我的实现:
@ObservedObject var itemsStore = TaskStore()
var body: some View
ZStack
VStack
List
ForEach(self.itemsStore.task) task in
Text(task.todoItem)
.onMove self.$itemsStore.move(fromOffsets: $0, toOffset: $1)
.onDelete self.$itemsStore.remove(atOffsets: $0)
你们中的任何人都知道为什么或如何解决此错误以便能够使用onMove
和onDelete
函数吗?
非常感谢您的帮助。
【问题讨论】:
【参考方案1】:第一个问题
您需要将.onMove
和.onDelete
附加到ForEach
,而不是List
。
这是您当前的代码:
ZStack
VStack
List
ForEach(self.itemsStore.task) task in
Text(task.todoItem)
.onMove self.$itemsStore.move(fromOffsets: $0, toOffset: $1)
.onDelete self.$itemsStore.remove(atOffsets: $0)
可以这样解决(在答案的第二部分中仍然提到了问题):
ZStack
VStack
List
ForEach(self.itemsStore.task) task in
Text(task.todoItem)
.onMove self.$itemsStore.move(fromOffsets: $0, toOffset: $1)
.onDelete self.$itemsStore.remove(atOffsets: $0)
第二个问题
当您拨打move(fromOffsets:toOffset:)
时,您必须拨打MutableCollection
,例如数组。你在一个对象的绑定上调用它。
也许你的意思是:
self.$itemsStore.move(fromOffsets: $0, toOffset: $1)
类似:
self.itemsStore.task.move(fromOffsets: $0, toOffset: $1)
【讨论】:
即使我做出了您建议的更改,我仍然收到此错误Cannot call value of non-function type 'Binding<Subject>'
我认为是因为我正在使用'@ObservedObject var itemsStore = TaskStore()'
@user2924482 你看到答案的第二部分了吗?我认为那会解决它。这不是您在这里遇到的一个问题
@ObservedObject var itemsStore = TaskStore()
如何转换成MutableCollection
?
@user2924482 TaskStore
是一个对象。你应该使用一个数组,就像我的建议一样。在ForEach
中,看起来您正在使用数组。【参考方案2】:
如果我正确地对您的TaskStore
进行成像,这里是代码的固定部分
List
ForEach(self.itemsStore.task) task in
Text(task.todoItem)
.onMove(perform: self.itemsStore.move)
.onDelete(perform: self.itemsStore.remove)
.onMove
和.onDelete
是ForEach
动态容器的修饰符,所以应该在那里应用,并通过引用放置相应的函数。
【讨论】:
以上是关于SwiftUI:列表错误无法调用非函数类型'Binding<Subject>'的值的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 错误“无法调用非函数类型 'UITableView!' 的值” [关闭]
Swift 错误:无法调用非函数类型“SKSpriteNode”的值