Я пытаюсь заставить NSScanner просканировать мне строку на наличие в
ней какого-то символа и вернуть BOOL, чтобы я на основании этого уже
что-то еще делал. Но почему-то NSScanner постоянно возвращает мне
"NO". :-( Проверял документацию, кажется все правильно. Но, видимо,
только кажется, раз не работает. Вот код:
NSString *myString = @"hello.";
NSScanner *sentenceSeparatorScanner = [NSScanner
scannerWithString:myString];
NSCharacterSet *separatorsCharacterSet = [NSCharacterSet
characterSetWithCharactersInString:@"."];
[sentenceSeparatorScanner setCharactersToBeSkipped:nil];
if ([sentenceSeparatorScanner
scanCharactersFromSet:separatorsCharacterSet intoString:NULL] == TRUE)
NSLog(@"TRUE");
else
NSLog(@"FALSE");
Подскажите, пожалуйста, что тут неправильно?
Антон.
Поправка: и так cо scanCharactersFromSet:intoString: неправильно
получится:
YES if the receiver scanned any characters, otherwise NO.
Хе-хе, нет:
CFBase.h:
#if !defined(TRUE)
#define TRUE 1
#endif
#if !defined(FALSE)
#define FALSE 0
#endif
objc.h:
#define YES (BOOL)1
#define NO (BOOL)0
Так что, фактически разницы нет, хоть и принято YES/NO использовать.
Да, и еще.
ЕСЛИ (Я ПРОВЕРЯЮ УСЛОВИЕ С ПОМОЩЬЮ СРАВНЕНИЯ С YES ИЛИ NO == Я
ПРОВЕРЯЮ УСЛОВИЕ С ПОМОЩЬЮ СРАВНЕНИЯ С YES ИЛИ NO) ТО
Я ЧТО-ТО ДЕЛАЮ НЕ ТАК
-ДЧ
Только у тебя там опечатка: не rangeOfCharactersFromSet:, а
rangeOfCharacterFromSet: :)
Приму на заметку, что принято использовать YES и NO.
Тем временем у меня еще один вопрос появился. Вот такой код работает:
unichar letter = [itemToScanMutableString characterAtIndex:0];
[itemToScanMutableString replaceCharactersInRange:NSMakeRange(0, 1)
withString:[[NSString stringWithCharacters:&letter length:1]
uppercaseString]];
А его небольшая модификация (для убирания ненужной тут переменной
letter) выдает ошибку компилятора "warning: passing argument 1 of
'stringWithCharacters:length:' makes pointer from integer without a
cast":
[itemToScanMutableString replaceCharactersInRange:NSMakeRange(0, 1)
withString:[[NSString stringWithCharacters:[itemToScanMutableString
characterAtIndex:0] length:1] uppercaseString]];
Как сделать текст в квадратных скобках поинтером? :/ Или так сделать
нельзя? :(
Так сделать нельзя, оператор & требует
lvalue
(хрень, которую можно поставить в левую
часть присвоения, типа:
letter = 100; // lvalue
[itemToScanMutableString characterAtIndex:0] = 100; // не катит )
Так что оставь переменную -- да и
читабельнее так будет.
— Dmitry Chestnykh.
[temporaryMutableString replaceCharactersInRange:NSMakeRange(0, 1)
withString:[[temporaryMutableString substringWithRange:NSMakeRange
(0,1)] uppercaseString]];
On Apr 8, 12:17 am, Dmitry Chestnykh <dmi...@codingrobots.com> wrote:
> Так сделать нельзя, оператор & требует
> lvalue
>
> (хрень, которую можно поставить в левую
> часть присвоения, типа:
> letter = 100; // lvalue
> [itemToScanMutableString characterAtIndex:0] = 100; // не катит )
>
> Так что оставь переменную -- да и
> читабельнее так будет.
>
> -- Dmitry Chestnykh.