注意: - 这个问题最初是在 Xcode 15 处于测试阶段时发布的。在 Xcode 15 的最终版本中,编译器给出了更清晰的错误说明:
默认值需要完全限定的域名值
原问题:
我已将这个问题缩小到一个简单的模型类,其中一个属性具有枚举类型。如果我尝试为该属性指定默认值,则代码将无法再编译:
enum SomeEnum: Hashable, Codable {
case one
case two
}
@Model
class SomeClass {
var value: SomeEnum = .two
init() {
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致错误:
输入“有吗?” 没有成员“二”
如果您深入研究实际日志,您可以看到更多信息:
@__swiftmacro_8Sample39SomeClass5ModelfMm_.swift:15:34:错误:输入“有吗?” 没有成员“二”
(“值”,\SomeClass.value,.two,nil)
~^~
/.../Sample.swift:117:1: 注意:在宏“模型”的扩展中
类 SomeClass {
^~~~~~~~~~~~~~~~~
/.../Sample.swift:117:1: 注意:在宏“模型”的扩展中
类 SomeClass {
^~~~~~~~~~~~~~~~~
如果右键单击@Model并选择“展开宏”,您会看到:
@__swiftmacro_8Sample39SomeClass5ModelfMm_.swift:15:34: error: type 'Any?' has no member 'two'
("value", \SomeClass.value, .two, nil)
~^~~
/.../Sample.swift:117:1: note: in expansion of macro 'Model' here
class … 我有一对多关系 SwiftData 模型。但是,当我尝试附加数据时,会导致错误SwiftData/PersistentModel.swift:540: Fatal error: Unsupported relationship key path ReferenceWritableKeyPath<Student, School>。我应该如何解决这个问题?
@Model
final class School {
var name: String
@Relationship(deleteRule: .cascade, inverse: \Student.school)
var students: [Student] = []
init(name: String) {
self.name = name
}
}
@Model
final class Student {
var fullName: String
var school: School
init(fullName: String, school: School) {
self.fullName = fullName
self.school = school
}
}
Run Code Online (Sandbox Code Playgroud)
struct AddStudentToSchoolView: View {
let school: School
@Environment(\.modelContext) private var modelContext
var body: some View {
// code …Run Code Online (Sandbox Code Playgroud) 我们有一个 Swiftdata 模型,例如:
@Model
class MyThing {
var name:String
var myObject: MyCustomObject
//...
}
Run Code Online (Sandbox Code Playgroud)
为了让“myObject”(也是一个 @Model)在删除 MyThing 实例时自动删除,我们需要向 myObject 添加属性(?)、关系(.cascade)。
本教程中显示了这一点:
...还有这个苹果视频:
但是当我尝试这样做时,就会发生这种情况(似乎没有选项可以做到这一点)...如果我手动输入它,它会说找不到:
我有一个文件需要上传到服务器,我被告知在上传之前将文件分成多个块.所以这是一个问题:
1)我已将文件转换为"数据"类型(字节).如何将其拆分为每个1MB的块?
2)拆分后,如何使用Alamofire上传?如果不能使用Alamofire,请推荐我该怎么做.
我正在使用swift 3和Code 8.3.任何帮助深表感谢.
我正在尝试更新 SwiftData 中的数据。然而,该文档实际上只是:
func update(expressions: [String : NSExpression],
model: any PersistentModel.Type,
where predicate: NSPredicate? = nil) throws -> Bool
Run Code Online (Sandbox Code Playgroud)
作为一名新开发人员,我不知道其中大部分意味着什么或如何使用它。我的代码如下:
try? context.update(expressions ["teamScores":NSExpression(format: "\(teamScores)")], model: CounterModel.self)
Run Code Online (Sandbox Code Playgroud)
它失败了exception of type NSException。
老实说,我没能尝试太多。截至撰写本文时,这样一个新框架实际上已经在 6 天前发布,除了设置模型、保存数据和查询数据库之外,没有太多文档或示例。
我正在测试新的 SwifData 框架并使用新的 #Predicate 宏,并意识到它不支持不区分大小写的搜索。该宏不能与 lowercased() 方法或 localizedLowercase 属性一起使用,因此似乎无法像我们过去使用 NSPredicate 和 [c] 属性那样创建不区分大小写的谓词。
var predicate = #Predicate<Book> {
$0.title.localized().contains(search) }
Run Code Online (Sandbox Code Playgroud)
错误:此谓词不支持 lowercased() 函数(来自宏“Predicate”)
我想知道是否有任何解决办法。谢谢
我正在使用新的 swiftData 我试图理解这些关系是如何工作的,我很高兴必须对类进行建模:
我的应用程序上的每个航班都包含许多机组人员,我编写了如下代码所示的关系,但不断收到错误“致命错误:反向关系不存在”
我们应该如何写这个关系:
@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 …Run Code Online (Sandbox Code Playgroud) 我是第一次使用 SwiftData,当我尝试设置关系的值时遇到崩溃问题。
我有一个Profession代表游戏中工作的对象。每个人都Profession可能有开支(Expense如抵押贷款)。
我试图在应用程序首次启动时填充初始数据。当我创建第一个时Profession,我创建了一个Expense似乎可以工作的项目,但是当我创建第二个时,Expense应用程序Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1c3c6203c)在尝试设置Expense.profession关系时崩溃了。Xcode 扩展profession属性以显示 get/set,但它在 set 函数中崩溃。
我错过了一些明显的东西吗?或者 SwiftData 是否期望我做一些与 CoreData 在这种情况下非常不同的事情?
@Model
class Profession {
var id: UUID
var name: String
@Relationship(deleteRule: .cascade, inverse: \Expense.profession) var expenses: [Expense] = []
init(name: String) {
self.id = UUID()
self.name = name
}
convenience init(professiondefault: ProfessionDefault) {
self.init(name: professiondefault.name)
let taxes = Expense(name: "Taxes", cashflow: professiondefault.taxes, isPermanent: true, profession: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有搜索栏的 SwiftData 框架创建一个视图,用户可以在其中输入飞机的注册信息并动态更新列表。但首先我不确定我是否正确执行(我在网上找不到太多示例)并且收到错误:
通用结构“ForEach”要求“Query<Aircraft, [Aircraft]>”符合“RandomAccessCollection”
struct AirplanePick: View {
@State var addNewPlane = false
@Environment (\.modelContext) var mc
@Binding var planePick: Aircraft?
let dm: DataManager
@Environment(\.presentationMode) var presentationMode
@State var searchTerm: String = ""
var filterPlanes : Query<Aircraft, [Aircraft]>{
var predicate: Predicate<Aircraft>?
if !searchTerm.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
predicate = .init(#Predicate { $0.registration.contains(searchTerm) })
}
return Query(filter: predicate, sort: \.registration)
}
var body: some View {
List {
Text("planes are \(planes.count)")
ForEach(filterPlanes, id: \.self){ plane in
Button {
planePick = plane
self.presentationMode.wrappedValue.dismiss() …Run Code Online (Sandbox Code Playgroud) 我有 2 个漂亮的模型,想为它们创建一些虚拟预览数据,但我遇到了错误:
非法尝试在不同上下文中的对象之间建立“人”关系
错误发生在这里:
@MainActor
let previewContainer: ModelContainer = {
do {
let container = try ModelContainer(
for: Person.self, Item.self,
configurations: ModelConfiguration(isStoredInMemoryOnly: true)
)
let person = Person.dummy()
container.mainContext.insert(person)
for i in 0 ..< 12 {
let item = Item.dummy(i, person: person) //ERROR!
container.mainContext.insert(item)
}
return container
} catch {
fatalError("Failed to create container \(error)")
}
}()
Run Code Online (Sandbox Code Playgroud)
我正在使用 Xcode 15 beta 8。知道我做错了什么吗?
以下是我的模型供参考:
项目型号
@Model
final class Item {
var note: String
var person: Person
init(note: String, person: …Run Code Online (Sandbox Code Playgroud)