swift 如何检测数据库中是否存在具有相同字段值的对象

ubof19bj  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(119)

我有以下模型

@Model
final class Location {
    @Attribute(.unique) var name: String
    
    init(name: String) {
        self.name = name;
    }
}

字符串
我有一个编辑视图为这个项目。我不想让人们试图保存一个项目已经存在的名称。

Button("Save") {
            withAnimation {
                save()
                dismiss()
            }
        }
        // Require a name to save changes.
        .disabled(
            name == "" || !isUnique())


...

private func isUnique() -> Bool {
    ForEach(locations) { location in
        if location.name == name {
            return true;
        }
    }
    return false;
}


我在isUnique函数中得到一些设计时错误。如何正确处理?

bvhaajcl

bvhaajcl1#

如果不能进行内存检查,则应执行单独的获取

func locationExists(for name: String, in modelContext: ModelContext) throws -> Bool {
    let predicate = #Predicate<Location> { $0.name == name }
    let fetchDescriptor = FetchDescriptor<Location>(predicate: predicate)

    return try modelContext.fetchCount(fetchDescriptor) > 0
}

字符串
我不知道为什么你的函数不起作用,但我会把它写为

private func isUnique(for name: String) -> Bool {
    locations.contains(where { $0.name == name }) == false
}

相关问题