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
相关产品推荐
相关产品推荐

