将 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);
我有一个 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);