Конвертировать NSCFString в NSString
Я получаю словарь с сервера
myDictionary =
{
"rank":"1",
"color":"red",
"position":"middle"
}
Теперь я хочу проверить значение ключа "позиция" в условии if
Я делаю это так
if ([[myDictionary valueForKey:@"position"] isEqualToString:@"middle"]) {
//do Some stuff
} else{
//do some other stuff
}
но тип данных [myDictionary valueForKey:@"position"]
является _NSCFString
, поэтому он не сравнивает значение должным образом и никогда не входит, если цикл даже значение является правильным.
как я могу преобразовать это в NSString
чтобы я мог сравнить это в состоянии?
Я видел эти вопросы..
Экземпляр NSString сообщает свой класс как NSCFString
Получение NSString из NSCFString
NSString или NSCFString в xcode?
от этих вопросов я только что узнал, что NSString
действительно контейнерный класс для различных типов строковых объектов. Обычно конструктор NSString возвращает объект, который на самом деле имеет тип NSCFString
, которая является тонкой оберткой вокруг основы CFString
struct
,
но они не помогли мне... и никто на самом деле не рассказывал, как конвертировать в NSString, поэтому, пожалуйста, не помечайте его как дубликат.
2 ответа
Вам не нужно конвертировать _NSCFString
в NSString
, Как подкласс NSString
это гарантированно ответит на -isEqualToString:
(и любой другой метод в NSString
). Ваша проблема не исходит от строки, скорее всего, она исходит от myDictionary
, Попробуйте зарегистрировать все ключи в словаре и убедитесь, что он работает так, как ожидалось.
CFString
с можно привести к NSString
S согласно документам
NSString "соединен бесплатно" со своим базовым аналогом, CFStringRef. См. "Бесплатные мосты" для получения дополнительной информации о бесплатных мостах.
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
}