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

如何在SwiftData的@Model类中使用结构体作为属性类型

如何在SwiftData的@Model类中使用结构体作为属性类型

我之前也碰到过一模一样的问题!当你在SwiftData的@Model类里把自定义结构体作为属性时,编译器抛出的No exact matches in call to instance method 'setValue'错误,本质是因为SwiftData的存储系统没办法直接处理未遵循特定协议的自定义结构体类型。

你原来的代码里,dimUnits只是个普通结构体,没有实现SwiftData要求的序列化/反序列化能力,所以它没办法被正确存入SwiftData的底层存储中。

解决方法其实很简单——只需要让你的自定义结构体遵循Codable协议就可以了。Codable协议会让Swift自动生成序列化和反序列化的逻辑,这样SwiftData就能正确处理这个结构体类型了。

修改后的代码如下:

首先是更新后的结构体:

struct dimUnits: Codable {
    var now: UInt
    var prev: UInt
}

然后你的@Model类就可以正常使用这个结构体作为属性了:

@Model
class SurfaceJob: Identifiable {
    public var id: UUID?
    var timestamp: Date
    var name: String
    var units: UInt
    var xSize: Double
    var ySize: Double
    var xyUnits: dimUnits
}

这样修改之后,编译器就不会再报错,SwiftData也能正确存储和读取xyUnits这个属性了。

备注:内容来源于stack exchange,提问作者tgunr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:18:11