AAV*_*AAV 3 core-data swiftui combine
我无法将 core Data 对象中的 bookName 绑定到循环内的 TextField ForEach
。我怎样才能让这个绑定工作?我希望该bookName
值在更改时保存到核心数据中。
我收到一条错误消息:无法在范围内找到 $book。
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我喜欢 CoreData 和 SwiftUI。它的工作原理就是这么简单。ObservedObject
只需使用Book创建一个新的编辑视图即可。
struct EditView : View {
@ObservedObject var book: Book
init(book: Book) {
self.book = book
}
var body : some View {
TextField("Name", text: $book.bookName)
}
}
Run Code Online (Sandbox Code Playgroud)
就是这样。然后您可以$book.bookName
作为绑定发送到字符串。
但是,请确保!您已将 bookName 声明为 CoreData 中的非可选值。TextField 需要 a Binding<String>
,而不是 aBinding<String?>
在 ForEach 中使用 EditView 就可以开始了:
ForEach(books) { book in
EditView(book: book)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1705 次 |
最近记录: |