Core data SwiftUI绑定到foreach内部的核心数据对象
我无法将核心数据对象中的bookName绑定到ForEach循环中的TextField。我怎样才能使这个装订工作?我希望bookName值在更改时保存到核心数据 我收到一个错误,提示:在范围中找不到$bookCore data SwiftUI绑定到foreach内部的核心数据对象,core-data,swiftui,combine,Core Data,Swiftui,Combine,我无法将核心数据对象中的bookName绑定到ForEach循环中的TextField。我怎样才能使这个装订工作?我希望bookName值在更改时保存到核心数据 我收到一个错误,提示:在范围中找不到$book extension Book: Identifiable { @nonobjc public class func fetchRequest() -> NSFetchRequest<Book> { r
extension Book: Identifiable {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Book> {
return NSFetchRequest<Book>(entityName: "Book")
}
@NSManaged public var id: UUID?
@NSManaged public var bookName: String?
var wrappedBookName: String {
bookName ?? ""
}
}
struct BookListView: View {
@FetchRequest(entity: Book.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Book.rankNumber, ascending: false)]) var books: FetchedResults<Book>
var body: some View {
ForEach(books) { book in
TextField("Book Name", text: $book.bookName) //Error: cannot find $book in scope
}
}
}
扩展手册:可识别{
@nonobjc公共类func fetchRequest()->NSFetchRequest{
返回NSFetchRequest(entityName:“Book”)
}
@NSManaged公共变量id:UUID?
@NSManaged public var bookName:字符串?
var wrappedBookName:String{
书名??“
}
}
结构BookListView:视图{
@FetchRequest(实体:Book.entity(),SortDescriptor:[NSSortDescriptor(键路径:\Book.rankNumber,升序:false)])var books:FetchedResults
var body:一些观点{
ForEach(books){book in
TextField(“Book Name”,text:$Book.bookName)//错误:在作用域中找不到$Book
}
}
}
我喜欢带SwiftUI的CoreData。它就是这么简单。只需使用Book的ObservedObject
创建一个新的编辑视图
struct EditView : View {
@ObservedObject var book: Book
init(book: Book) {
self.book = book
}
var body : some View {
TextField("Name", text: $book.bookName)
}
}
就这样。然后可以将$book.bookName
作为绑定发送到字符串
但是,一定要确保!您已在CoreData中将bookName声明为非可选值。TextField需要绑定
,而不是绑定
在ForEach中使用该EditView,即可开始:
ForEach(books) { book in
EditView(book: book)