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

Objective-C中如何让NSUserDefaults遵循协议?对比Swift实现

在Objective-C中实现NSUserDefaults遵循自定义协议的方案

当然可以实现!Objective-C里同样支持协议+分类的组合用法,来达到和你Swift代码完全等价的效果,具体步骤如下:

1. 定义协议

首先先声明你的Archivable协议,和Swift里的空协议对应,Objective-C里可以这么写:

@protocol Archivable <NSObject>
// 如果后续需要给协议添加要求实现的方法,直接写在这里即可;空协议的话保持空就行
@end

2. 通过分类让NSUserDefaults遵循协议

接下来用Objective-C的分类(Category),让NSUserDefaults遵循这个协议:

// 分类声明中直接指定遵循Archivable协议
@interface NSUserDefaults (Archivable) <Archivable>
@end

// 分类实现部分,空协议无需额外实现代码
@implementation NSUserDefaults (Archivable)
// 若协议有必须实现的方法,需要在这里补充实现;空协议则留空即可
@end

补充说明

  • 和Swift的逻辑一致:通过分类扩展已有类,让它遵循自定义协议,无需修改原类的源码
  • 如果你的Archivable协议后续添加了必须实现的方法,要么确保NSUserDefaults本身已经实现了该方法,要么在分类里补充实现,否则编译器会抛出警告
  • 这种方式完全符合Objective-C的语法规范,和Swift中extension UserDefaults: Archivable的作用是完全等价的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:16:02