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

