我从服务器
获取字典myDictionary =
{
"rank":"1",
"color":"red",
"position":"middle"
}
现在我想在条件
中检查键“position”的值我这样做
if ([[myDictionary valueForKey:@"position"] isEqualToString:@"middle"]) {
//do Some stuff
} else{
//do some other stuff
}
但[myDictionary valueForKey:@"position"]
的数据类型为_NSCFString
,因此它不能正确地比较值,如果循环,即使值正确,也不会进入。
如何将其转换为NSString
以便我可以在条件下进行比较?
我见过这些问题..
NSString instance reports its class as NSCFString
Getting an NSString from an NSCFString
NSString or NSCFString in xcode?
从这些问题我才刚刚知道
NSString
实际上是不同类型的字符串对象的容器类。通常,NSString构造函数确实返回一个实际类型为NSCFString
的对象,它是Core Foundation CFString
struct
周围的薄包装。
但是他们没有帮助我..没有人真正告诉如何转换成NSString,所以请不要将其标记为重复。
答案 0 :(得分:6)
您不需要将_NSCFString
转换为NSString
。作为NSString
的子类,它可以保证响应-isEqualToString:
(以及NSString
中的所有其他方法)。您的问题不是来自字符串,可能来自myDictionary
。尝试记录字典中的所有键,并确保其表现符合预期。
答案 1 :(得分:0)
CFString
可根据文档
NSString
s
NSString与其核心基金会对手CFStringRef进行了“免费桥接”。有关免费桥接的详细信息,请参阅“Toll-Free Bridging”。
NSString *nsString = @"Hello";
CFStringRef cfString = (CFStringRef) nsString;
你真的想弄清楚为什么价值观不平等。分开你的方法调用:
NSString *positionValue = myDictionary[@"position"];
NSLog(@"Position value: %@", positionValue);
if ([positionValue isEqualToString:@"middle"]) {
// do Some stuff
} else{
// do some other stuff
}