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

Realm中@Persisted属性能否同时添加@objc注解?

Realm @Persisted注解常见问题解答

1. 同时标注@Persisted和@objc的属性是否会被持久化?

  • 单独标注@Persisted var token: String?:会正常被持久化,这是Realm 10.10.0+版本的标准用法。
  • 同时标注@Persisted @objc var lastRegisteredDate: Date?:同样会被持久化。官方文档仅明确混合@Persisted与@objc dynamic时,dynamic会被忽略,但仅添加@objc不会影响@Persisted的持久化逻辑——@objc的作用只是让属性暴露给Objective-C代码访问,和Realm的持久化规则不冲突。

2. Swift中@Persisted属性在Objective-C中访问报错的解决方法

报错原因

@Persisted注解的属性默认不会生成Objective-C兼容的访问接口,即便所在类标注了@objc,OC代码也无法识别该属性。

解决办法

给@Persisted属性额外添加@objc注解,确保属性暴露给Objective-C。修改后的模型代码如下:

@objc
public class PushNotificationSettings: Object {
    @Persisted @objc
    public var registrationId: String?
}

修改后,Objective-C代码中访问self.settings.registrationId就不会出现编译错误。

另外,添加@objc后,也可以正常通过#keyPath获取属性字符串,比如#keyPath(PushNotificationSettings.registrationId)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:59:56