SwiftUI 获取联系人重复

SwiftUI Fetching contacts duplication

我有一个具有获取联系人功能的模型视图:

class ContactsStore: ObservableObject {

@Published var contacts = [CNContact]()

func fetch() {} ...

然后在我看来:

@EnvironmentObject var store: ContactsStore

var groupedContacts: [String: [CNContact]] {
    .init (
        grouping: store.contacts,
        by: {[=11=].nameFirstLetter}
    )
}
     ...
       List() {
            ForEach(self.groupedContacts.keys.sorted(), id: \.self) { key in ...

为了方便起见,我已经缩短了我的代码,如果需要,我会 add/edit。我面临的问题 - 每次呈现我的视图时,都会调用 fetch 函数,并且我的联系人数组会在我的视图中重复。 TIA 寻求帮助

UPD:由于调用列表 .onAppear 中的方法 fetch 而发生重复。所以我在研究如何只调用一次这个方法,而不是每次视图出现时。

您可以像这样在 Init() 中进行提取:

struct someView: View{
    var list: [Settings]
    init(){
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        let fetchRequest: NSFetchRequest<Settings> = Settings.fetchRequest()
        //... some order and filter if you need
        self.list = context.fetch(fetchRequest)
    }
    var body: some View{
        ...
        ForEach(list){settings in
            ...
        }
        ...
    }
}

没有尝试分组,但你问了如何只获取一次。答案是——在 init().

但是你无法在 init 中得到 @Environment,所以我从 AppDelegate 中得到了 context。或者您可以将 context 作为 init 参数传递