新的SwiftData框架在使用Array
时可以成功运行,但在@Relationship
中使用Set
时会产生致命错误。为什么?为什么?
import Foundation
import SwiftData
@Model
final class Item {
var timestamp: Date
@Relationship(inverse: \Parent.items) var parent: Parent?
init(timestamp: Date) {
self.timestamp = timestamp
}
}
@Model final public class Parent {
var items: Set<Item>
}
SwiftData/SchemaCoreData.swift:907:致命错误:无法将关系链接到目标实体“Set”,因为在模型中找不到它:(<NSRelationshipDescription: 0x6000033085a0>),name items,isOptional 0,isTransient 0,entity Parent,renamingIdentifier items,validation predicate(),warnings(),versionHashModifier(null)userInfo { },destination entity(null),inverseRelationship(null),minCount 0,maxCount 1,isOrdered 0,deleteRule 1
在Xcode beta 15.0中测试。
1条答案
按热度按时间uyto3xhc1#
正如https://www.avanderlee.com/swift/array-vs-set-differences-explained/所指出的,当项目的顺序不重要时,或者当你需要确保一个项目只出现一次时,你可以使用Set而不是Array。记住这两种类型都是值类型,其中数组可以保存两次值,而Set从不包含重复的值。
在我看来,你想让项目集成为一对多的关系?iOS 17,你可以让我成为标准的SwiftData项目。将标准重命名为IItem,并在下面插入两个模型。应该会有用