如何解决希望将系统设置存储在核心数据中
使用SwiftUI
我创建了一个名为SystemSettings的CoreData实体,并希望使用存储在其中的信息在不使用ForEach的情况下在不同视图上的不同函数中计算结果。 SystemSettings始终仅从预加载的数据库存储一个对象(记录)。有没有一种方法可以使用@FetchRequest并拉出唯一的对象及其属性,以var ....?
谢谢
import SwiftUI
import CoreData
struct NewComponent: View {
@FetchRequest(entity: SystemSettings.entity(),sortDescriptors: []) var settings: FetchedResults<SystemSettings>
@Environment(\.managedObjectContext) var moc
@Environment(\.presentationMode) var presentationMode
var calculator = Calculator()
// USER DATA TEXT FIELDS
@State var parameterOne = "12.5"
@State var parameterTwo = "2.5"
@State var calculationResult = ""
var body: some View {
VStack {
Form {
Section (header: Text("Parameters").font(.headline).bold().italic()) {
HStack {
Text ("Length")
.font(.headline)
Spacer()
TextField ("m",text: $parameterOne).modifier(ClearButton(text: $parameterOne))
.multilineTextAlignment(.trailing)
.keyboardType(.decimalPad)
.font(.headline)
}
HStack {
Text ("Width")
.font(.headline)
Spacer()
TextField ("m",text: $parameterTwo).modifier(ClearButton(text: $parameterTwo))
.multilineTextAlignment(.trailing)
.keyboardType(.decimalPad)
.font(.headline)
}
}
}
Section(header:
Text("\(self.calculationResult)").bold().italic().padding(.top)
) {
Button(action: {
self.calculationResult = self.result()
}) {
HStack {
Spacer()
Image(systemName: "x.squareroot")
Text("Calculate!")
Spacer()
}.font(.headline).foregroundColor(Color.green)
.padding(.bottom,40.0).padding(.top,20.0)
}
}
}.navigationBarTitle(Text("Component Calculator"))
.gesture(DragGesture().onChanged{_ in UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder),to: nil,from: nil,for: nil)})
.modifier(KeyboardObserving())
.navigationBarItems(trailing: Button(action: {
let newEstimatedComponent = EstimatedComponents(context: self.moc)
newEstimatedComponent.name = "New Component"
newEstimatedComponent.price = self.priceToDisplay()
try? self.moc.save()
self.presentationMode.wrappedValue.dismiss()
}){Image(systemName: "checkmark.circle").font(.system(size: 30))})
}
func result () -> String {
let result = componentCost()
return (String(format: "%.2f",(result)) + " €")
}
func priceToDisplay() -> Double {
return componentCost()
}
func componentCost () -> Double {
return calculator (componentWidth: Double(parameterOne),componentHight: Double(parameterTwo),componentPrice: settings!.componentM2Price )
}
/*settings!componentM2Price not working of course,so I need to get the first and the only object from SystemSettings Entity in a way that I can use it in func componentCost()...*/
再次感谢...
解决方法
解决了!
@EnvironmentObject var settings: ModifySystemSettings
let systemSettings: SystemSettings
您可以在此处找到更多信息: https://www.hackingwithswift.com/quick-start/swiftui/how-to-use-environmentobject-to-share-data-between-views
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。