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,数组中所有的元素(数组或者字典) 无论多少层也是可变的,可以直接取修改字典或数组中元素的值。
————————————————