iOS 不可变数组转可变数组 不可变字典转可变字典 NSArray 转 NSMutableArray

iOS 不可变数组转可变数组
NSArray 转 NSMutableArray

 self.menuArray = @[@"room_seat",
                       @"room_seat",
                      @"home_lisen",
                      @"home_cp",
                               @"1381648345474_.pic_hd",
                               @"1371648345474_.pic_hd",
                               @"编组 5",
                       @"2041648356712_.pic_hd"];
 NSMutableArray *dataArray =  [_menuArray mutableCopy];

不可变字典转可变字典
NSDictionary转NSMutableDictionary
从接口请求回来的数据直接赋值给可变字典

@property (strong, nonatomic) NSMutableDictionary *myInfoDic;
self.myInfoDic = [[NSMutableDictionary alloc] init];
 [self.myInfoDic addEntriesFromDictionary:content[@"data"]];

下面内容为转载内容:
版权声明:本文为CSDN博主「wu_yan00」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wu_yan00/article/details/93197319

在iOS开发过程中,我们有时候会有这样的需求,将一个 不可变的字典或者数组转换为可变的,可以使用系统的mutableCopy方法,但是这样只是第一层可变,如果数组或字典有多层时,我们去修改值深层次的值时,会发生崩溃,这样并不能达到预期的要求,可以给数组和字典添加分类来实现这个功能。

可以自己定义一个文件

.h 文件中

#import <Foundation/Foundation.h>
@interface NSArray (Catetory)
-(NSMutableArray *)mutableArrayDeeoCopy;
@end
 
@interface NSDictionary (Catetory)
-(NSMutableDictionary *)mutableDicDeepCopy;
@end    

.m 文件中

    #import "MutableCopyCatetory.h"
    @implementation NSArray (Catetory)
    
    -(NSMutableArray *)mutableArrayDeeoCopy{
        
        NSMutableArray * array = [NSMutableArray array];
        [self enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
          id objOject;
          
        if ([obj isKindOfClass:[NSDictionary class]]) {
            objOject = [obj mutableDicDeepCopy];
            
        }else if ([obj isKindOfClass:[NSArray class]]){
            
            objOject = [obj mutableArrayDeeoCopy];
            
        }else{
            
            objOject = obj;
        }
       [array addObject:objOject];
        
    }];
    
    return array;
    }
 
@end
 
    @implementation NSDictionary (Catetory)
-(NSMutableDictionary *)mutableDicDeepCopy{
 
    NSMutableDictionary *dict=[[NSMutableDictionary alloc] initWithCapacity:[self count]];
 
    NSArray *keys=[self allKeys];
    for(id key in keys)
    {
    //循环读取复制每一个元素
        id value=[self objectForKey:key];
        id copyValue;
        
        // 如果是字典,递归调用
        if ([value isKindOfClass:[NSDictionary class]]) {
            
            copyValue=[value mutableDicDeepCopy];
            
            //如果是数组,数组数组深拷贝
        }else if([value isKindOfClass:[NSArray class]])
            
        {
            copyValue=[value mutableArrayDeeoCopy];
        }else{
            
            copyValue = value;
        }
        
        [dict setObject:copyValue forKey:key];
        
    }
    return dict;
 
}
 
@end

只要导入头文件,字典调用mutableDicDeepCopy,字典中所有value(数组或者字典)无论多少层都是可变的,数组调用mutableArrayDeeoCopy,数组中所有的元素(数组或者字典) 无论多少层也是可变的,可以直接取修改字典或数组中元素的值。
————————————————

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值