You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SwiftData模型在指定集合内保持唯一性而非全局唯一?

SwiftData中实现集合内属性唯一而非全局唯一的问题

我正在学习在SwiftUI iOS应用中使用SwiftData框架进行数据存储,发现无法在SwiftData模型中直接使用Swift的Set,但需要实现类似Set的唯一性功能——要求同一台计算机下的目录路径不能重复,但不同计算机可以拥有相同路径的目录。

初始模型代码

@Model class Computer {
    // 计算机的序列号全局唯一
    @Attribute(.unique) let serialNumber: String
    // 一台计算机可拥有多个目录
    @Relationship(deleteRule: .cascade) var directories: [Directory]
    
    init(name: String, directories: [Directory] = []) {
        self.name = name
        self.directories = directories
    }
}

@Model class Directory {
    // 期望:同一台计算机下的目录路径唯一,但不同计算机可重复(当前未实现)
    @Attribute(.unique) let path: String
    // 一个目录可拥有多个文件
    @Relationship(deleteRule: .cascade) var files: [File]
    
    init(path: String, files: [File] = []) {
        self.path = path
        self.files = files
    }
}

期望实现的功能

  • 创建两台计算机:Computer "A" 和 Computer "B"
  • 为每台计算机分别创建"/home"目录
  • 两个"/home"是Directory的独立实例,各自可以存储不同的文件

遇到的问题

使用上述初始代码时,给Computer "A"添加"/home"目录可以正常执行,但给Computer "B"添加相同路径的目录时程序直接崩溃。

尝试的修改及新问题

我尝试给关系添加反向关联:
修改Computer模型的directories属性:

@Relationship(deleteRule: .cascade, inverse: \Directory.computer) var directories: [Directory]

并在Directory模型中添加:

var computer: Computer?

修改后,给Computer "B"添加"/home"目录不再崩溃,但会自动删除Computer "A"中同路径的Directory实例。

核心疑问

为什么会出现这种情况?SwiftData中是否支持实现仅在指定集合(比如某台计算机的目录列表)内保持属性唯一性,而非全局唯一?我没有找到相关的示例或官方文档说明。


内容的提问来源于stack exchange,提问作者fraune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:22:33