将 NSDictionary 值转换为 NSString

Convert NSDictionary values to NSString

我有一个 NSDictionary,其中的值是不同类型的,但需要转换为字符串并放回原始 NSDictionary。到目前为止我有以下内容:

for (id key in myDictionary) {
    id value = [myDictionary objectForKey:key];
    value = (NSString *)[NSString stringWithFormat:@"%@", value];
}

然而这是行不通的——当我之后打印出每个值的类型时,它们和以前一样。有人可以建议吗?

当您将对象传递到具有 %@ 的格式字符串时,对象 - (NSString *)description 会被调用。如果你没有在你的 subclass 中覆盖这个方法,它将默认打印 class 名称和对象内存地址。另外,不需要强制转换。

要解决您的问题,您可以在 classess 中提供 description 方法的自定义实现,或者使用 - (NSString *)toString 方法创建自己的协议并在需要的地方实现它。

你可以试试这个

for (id key in myDictionary) {
   if ([key isKindOfClass:[NSString class]]) {
       NSString * value = [[myDictionary objectForKey:key] stringValue];
   }
}

试试这个!!你会得到好主意!如果您想要明确的选项,请提供示例字典值?

    NSMutableDictionary *myDictionary = [NSMutableDictionary new];
    [myDictionary setObject:@"Vignesh" forKey:@"name"];
    [myDictionary setObject:@(10) forKey:@"rollnum"];
    [myDictionary setObject:@(429) forKey:@"mark"];
    [myDictionary setObject:@(85.8) forKey:@"average"];

    for (id key in myDictionary) {
        NSLog(@"Befor Convert Value %@ - Class %@",[myDictionary objectForKey:key], [[myDictionary objectForKey:key] class]);
        NSString *value = [NSString stringWithString:[NSString stringWithFormat:@"%@",[myDictionary objectForKey:key]]];
        NSLog(@"After Value %@ - Class %@ - Length %@",value, [value class],@(value.length));
    }

描述方法的实现,感谢@Losiowaty

//quick way to create dictionary
NSDictionary * d = @{@"keyA":@(22),@"keyB":[UIView new],@"keyC":@"valueC"};

//create mutable dictionary for new values
NSMutableDictionary * md = [@{}mutableCopy];

//loop through all keys
for (NSString * key in d.allKeys){

    //set value
    md[key]=[d[key] description];

}

NSLog(@"d is %@", d);
NSLog(@"md is %@", md);