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

Objective-C如何保证NSMutableDictionary内元素遵守NSCopying协议

解决方案
  • 你此前的属性声明写法存在错误:将<NSCopying>放在指针尾部的写法,是要求字典实例本身遵守NSCopying协议,而非限制字典内部存储的元素类型,因此无法实现你需要的校验效果。
  • 无需子类化NSDictionary,通过Objective-C轻量泛型语法即可实现编译期限制字典存储的value必须遵守NSCopying协议,正确的属性声明如下:
    @property NSMutableDictionary<id, id<NSCopying>> *options;
    
    该声明中,泛型的第一个参数对应字典key的类型,第二个参数对应字典value的类型,这里将value限定为id<NSCopying>即任意遵守NSCopying协议的对象。后续你向该字典插入value时,编译器会自动做类型校验,插入未遵守NSCopying协议的对象时会抛出类型不匹配的编译错误。
  • 上述限制仅作用于编译期,无法阻止运行时通过类型强转、runtime接口等非常规操作向字典插入不符合要求的对象,常规业务开发场景下该限制已足够覆盖需求。
  • 补充copyWithZone实现的注意点:由于你的属性是NSMutableDictionary可变类型,拷贝时不要直接调用copy方法(该方法返回不可变的NSDictionary实例,后续修改属性会触发崩溃),应调用mutableCopy方法拿到可变拷贝,示例写法:
    copiedInstance.options = [self.options mutableCopy];
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:57:03