首页 > 解决方案 > SwiftUI 读取已选择 UUID 的实体数据

问题描述

在研究和尝试了 2 天后,我没有找到任何解决方案。我希望你能给我一个提示。我还是初级水平。

目标:选择一个 bean 后(选择器工作正常)我想将选择的 bean.roastStyle 存储到 CurrentBeanStyle (我用“dark”初始化)。换句话说,我得到了实体的 UUID (chooseBeanID),并想读出实体的其余属性以将其存储到 Current...

import SwiftUI
import Combine

struct Dial_In: View {
  
   @Environment(\.managedObjectContext) var moc
   @FetchRequest(entity: Bean.entity(), sortDescriptors: []) var beans: FetchedResults<Bean>
    
   @State var chooseBeanID: UUID? = nil
   @State var CurrentBeanStyle = "dark"
   
   var body: some View {
        NavigationView {
            VStack{
                Form {
                    Section {                  
                        Picker("Bean", selection: $chooseBeanID) {
                            ForEach(beans, id: \.id) { bean in
                                HStack {
                                    Text(bean.roaster ?? "unknown")
                                    Text(bean.name ?? "unknown")
                                    Text(bean.roastStyle ?? "unknown")
                                 }.tag(bean.id)
                             }
                         }
                           .onReceive([self.chooseBeanID].publisher.first()) { (value) in
                                if self.chooseBeanID == nil {
                                }
                                else {
                                    self.SaveCurrentBeanData()
                                }
                           }
                     } 
                } 
           }      
       }.navigationBarTitle("Dial in", displayMode: .inline)
    }
    
        func SaveCurrentBeanData() {

        // Code Hier ............

        }  
    }
            
               

标签: core-dataswiftuientityuuid

解决方案


只需将 UUID 不存储在 State 中,而是将选定的Bean对象存储在 State 中,这样就更容易了。

@State var chooseBeanID: Bean?

然后对于Pickerwith Proxy Binding

Picker("Bean", selection: Binding<Bean?>(
    get: {
        self.chooseBeanID
    },
    set: {
        self.chooseBeanID = $0
        print($0)
        //here you can get your current Bean object with $0 or after setting it to chooseBeanID. 
        //You might call your function with that object or do operations here
    }
)) {
    ForEach(beans, id: \.self) { bean in
        HStack {
            Text(bean.roaster ?? "unknown")
            Text(bean.name ?? "unknown")
            Text(bean.roastStyle ?? "unknown")
        }.tag(bean as Bean?)
    }
 }

然后您可以跟踪选定的 Bean 并访问所有变量。您可以为选择执行代理绑定,然后您可以对新选定的项目运行任何操作。


推荐阅读