SwiftUI:如何在不在列表中的情况下从 CoreData show/edit 一个整数?
SwiftUI: How to show/edit an int from CoreData without being in a List?
这里是自学初学者。我试图在 ContentView 的 VStack 中显示来自核心数据的 Int,而不是在列表中。但实际上,我能找到的所有关于 Core Data(跟踪书籍、电影、订单、学生)的教程都使用 List 来显示包含 Int 的数组。没有显示 Int 本身。
Xcode 可以毫无问题地构建 countnum.countnum +=1。在我看来,它读起来很好。但是一旦我尝试展示它,它就不起作用了。我在这里破坏我的大脑。
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var countnum: FetchedResults<CountNum>
var body: some View {
// let countnum = CountNum(context: moc)
VStack{
Text("+")
.padding()
.onTapGesture (count: 2){
let countnum = CountNum(context: moc)
countnum.countnum += 1
}
Text("\(countnum)") //No exact matches in call to instance method 'appendInterpolation'
}
}
}
谢谢
....all the tutorials ... show an array containing an Int.
是的,那是因为CoreData
可以包含许多“对象”。你得到一个 CountNum
对象的数组
你做你的 .....var countnum: FetchedResults<CountNum>
。所以你需要决定你想要哪个 CountNum
采用。比如你要用第一个,那么:
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var countnum: FetchedResults<CountNum>
var body: some View {
VStack {
if let firstItem = countnum.first {
Text("+")
.padding()
.onTapGesture(count: 2) {
firstItem.countnum += 1
do {
try moc.save()
} catch {
print(error)
}
}
Text("\(firstItem.countnum)").foregroundColor(.green)
}
}
}
}
EDIT-1:将新的 CountNum 添加到 add
按钮中的 CoreData 示例代码。
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var countnum: FetchedResults<CountNum>
var body: some View {
Button(action: {add()}) { Text("add new CountNum").foregroundColor(.green) }
.padding(.top, 50)
List {
ForEach(countnum) { item in
HStack {
Text("++")
.onTapGesture(count: 2) { increment(item) }
Text("\(item.countnum)").foregroundColor(.blue)
Text("delete").foregroundColor(.red)
.onTapGesture { delete(item: item) }
}
}
}
}
func increment(_ item: CountNum) {
item.countnum += 1
save()
}
func add() {
let countnum = CountNum(context: moc)
countnum.countnum = 0
save()
}
func delete(item: CountNum) {
moc.delete(item)
save()
}
func save() {
do { try moc.save() } catch { print(error) }
}
}
这里是自学初学者。我试图在 ContentView 的 VStack 中显示来自核心数据的 Int,而不是在列表中。但实际上,我能找到的所有关于 Core Data(跟踪书籍、电影、订单、学生)的教程都使用 List 来显示包含 Int 的数组。没有显示 Int 本身。
Xcode 可以毫无问题地构建 countnum.countnum +=1。在我看来,它读起来很好。但是一旦我尝试展示它,它就不起作用了。我在这里破坏我的大脑。
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var countnum: FetchedResults<CountNum>
var body: some View {
// let countnum = CountNum(context: moc)
VStack{
Text("+")
.padding()
.onTapGesture (count: 2){
let countnum = CountNum(context: moc)
countnum.countnum += 1
}
Text("\(countnum)") //No exact matches in call to instance method 'appendInterpolation'
}
}
}
谢谢
....all the tutorials ... show an array containing an Int.
是的,那是因为CoreData
可以包含许多“对象”。你得到一个 CountNum
对象的数组
你做你的 .....var countnum: FetchedResults<CountNum>
。所以你需要决定你想要哪个 CountNum
采用。比如你要用第一个,那么:
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var countnum: FetchedResults<CountNum>
var body: some View {
VStack {
if let firstItem = countnum.first {
Text("+")
.padding()
.onTapGesture(count: 2) {
firstItem.countnum += 1
do {
try moc.save()
} catch {
print(error)
}
}
Text("\(firstItem.countnum)").foregroundColor(.green)
}
}
}
}
EDIT-1:将新的 CountNum 添加到 add
按钮中的 CoreData 示例代码。
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(sortDescriptors: []) var countnum: FetchedResults<CountNum>
var body: some View {
Button(action: {add()}) { Text("add new CountNum").foregroundColor(.green) }
.padding(.top, 50)
List {
ForEach(countnum) { item in
HStack {
Text("++")
.onTapGesture(count: 2) { increment(item) }
Text("\(item.countnum)").foregroundColor(.blue)
Text("delete").foregroundColor(.red)
.onTapGesture { delete(item: item) }
}
}
}
}
func increment(_ item: CountNum) {
item.countnum += 1
save()
}
func add() {
let countnum = CountNum(context: moc)
countnum.countnum = 0
save()
}
func delete(item: CountNum) {
moc.delete(item)
save()
}
func save() {
do { try moc.save() } catch { print(error) }
}
}