我在玩新的wiftData,我正在试着理解关系是如何工作的,我很高兴有机会为类建模:

我的应用程序上的每个航班都包含许多机组人员,我编写了如下代码中的关系,但不断收到错误消息:致命错误:不存在反向关系

我们应该如何写这种关系:

@Model
class Flight {
    @Attribute(.unique) var flightID: UUID
    var typeOfFlight: String
    var flightDateUTC : Date
    var flightNumber: String?
    
    @Relationship(.cascade) var flightData: FlightData
    @Relationship(.cascade) var flightTime : FlightTime
    @Relationship(.noAction) var aircraft : Aircraft?
    @Relationship(inverse: \CrewModel.name)
    var crews : [CrewModel]? //<-------------------------------
    
    init(flightID: UUID, typeOfFlight: String, flightDateUTC: Date, flightNumber: String? = nil, flightData: FlightData, flightTime: FlightTime, aircraft: Aircraft? = nil, crews: [CrewModel]? = nil) {
        self.flightID = flightID
        self.typeOfFlight = typeOfFlight
        self.flightDateUTC = flightDateUTC
        self.flightNumber = flightNumber
        self.flightData = flightData
        self.flightTime = flightTime
        self.aircraft = aircraft
        self.crews = crews
    }
}


@Model
class CrewModel{
    
    @Attribute(.unique) var id: UUID = UUID()
    @Relationship(.noAction, inverse: \Flight.flightID)
    var name : String?
    var crewID: String?
    var company: String?
    var isMe: Int?
    var email: String?
    var phone: String?
    var score: Int?
    var isPIC: Int?
    var isSIC: Int?
    var dataImage: Data?
    var comment: String?
    
    init(id: UUID, name: String? = nil, crewID: String? = nil, company: String? = nil, isMe: Int? = nil, email: String? = nil, phone: String? = nil, score: Int? = nil, isPIC: Int? = nil, isSIC: Int? = nil, dataImage: Data? = nil, comment: String? = nil) {
        self.id = id
        self.name = name
        self.crewID = crewID
        self.company = company
        self.isMe = isMe
        self.email = email
        self.phone = phone
        self.score = score
        self.isPIC = isPIC
        self.isSIC = isSIC
        self.dataImage = dataImage
        self.comment = comment
    }
}


推荐答案

使用inverse参数时,您只需在其中一种模型类型中定义关系.inverse的值必须指向模型类型的属性.

Flight年内

@Relationship(inverse: \CrewModel.flight) var crews : [CrewModel]?

CrewModel年内

var flight: Flight?

Swift相关问答推荐

按下一步后无法让文本字段切换焦点

RxSwift .debounce,.throttle用于分页

关闭 SwiftUI TabView 中的子视图

Swift 运算符中 inout 的行为

如何删除快速处理消息

在PrimitiveSequence上引用实例方法xxx需要类型A和any B等效

ForEach within List:模式的好处?

在 struct 中的序列和非序列泛型函数之间进行 Select

如何在 Combine 合并运算符的输出上使用 eraseToAnyPublisher

UIButton 配置不更新按钮标题

如何在 SwiftUI 中用图像替换占位符文本?

如何在 SwiftUI 中获取视图的位置

RxSwift 提高性能

RxSwift:share() 替代方案,保证upstream 的单一订阅

swift:修改字典中的数组

EXC_BREAKPOINT 崩溃的原因范围

Xcode 6 中的嵌入式内容包含 Swift 代码构建设置有什么作用?

无法分配给属性:self 是不可变的,我知道如何修复但需要理解

更改日期 Select 器的文本 colored颜色

将活动指示器 colored颜色 更改为黑色