如何解决SwiftUI不能绑定类数组参数
import SwiftUI
import Combine
class Button: Identifiable,ObservableObject {
var id = UUID()
@Published var title = String()
init(title: String) {
self.title = title
}
func changeTitle(title: String) {
self.title = title
}
}
然后我还有一个名为class
的{{1}},它具有一个Button数组作为参数。
ControlPanel
我必须在用class ControlPanel: Identifiable,ObservableObject {
var id = UUID()
@Published var name = String()
@Published var buttons:[Button] = []
init(name: String) {
self.name = name
}
}
类构建的自定义集合视图中侦听此数组:
UIViewControllerRepresentable
struct ButtonCollectionView: UIViewControllerRepresentable {
@Binding var buttons: [Button]
func makeUIViewController(context: Context) -> UICollectionViewController {
let vc = CollectionViewController(collectionViewLayout: .init())
vc.buttonArray = buttons
return vc
}
func updateUIViewController(_ uiViewController: UICollectionViewController,context: Context) {
if let vc = uiViewController as? CollectionViewController {
vc.buttonArray = buttons
vc.collectionView.reloadData()
}
}
}
当我加载内容视图时,我确实会获得所有单元格,但是一旦更改它们,视图将不会更新。我该如何解决这个问题?
解决方法
您的Button
已经在另一个@Published
属性中,因此@Published var title
无法正常工作。
最简单的解决方案是使您的Button
成为 struct (并将其重命名为SwiftUI尚未使用的名称,例如CustomButton
):
struct CustomButton: Identifiable {
var id = UUID()
var title = ""
mutating func changeTitle(title: String) {
self.title = title
}
}
有关更多高级解决方案,请参见:How to tell SwiftUI views to bind to nested ObservableObjects
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。