ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

NSString (Строки)

В уроках описанных выше мы уже сталкивались с типом данных строка. В этом уроке более подробно опишу как работать со строками вObjective-C.

Давайте создадим новый проект на основе представления (View-based Application) и назовем его Strings. Теперь откройте файлStringsViewController.m, раскомментируйте в нем метод viewDidLoad и добавьте в него несколько строк:

<code data-result="[object Object]">NSString *string1 = @"String one";
NSString *string2 = [NSString stringWithString:string1];
NSString *string3 = [[NSString alloc] initWithString:string1];
[string3 release];</code>

В первой строке мы указываем тип нашей переменной, то есть NSString. Затем следует знак *. Для чего нужен этот знак и почему мы его не ставили раньше? Дело в том, что наша переменная не относиться ни к одному из простых типов данных (intfloat и т.д.). Если быть точнее, NSString — это класс, а string1 — это экземпляр этого класса (о классах здесь и здесь). Затем мы присваиваем этому экземпляру значение.

В следующей строке мы так же создаем экземпляр класса NSString, но делаем это использую метод этого класса, который создает новую строку на основании уже имеющейся.

string3 так же создается с использованием одного из методов класса NSString, но перед вызовом этого метода мы выделяем память для нашей строки. Подробнее о работе с памятью я расскажу чуть позже, пока что вам следует просто запомнить: если вы в какой-то момент выделяете память для объекта — после его использования память необходимо очистить. В последней строке продемонстрирован процесс очистки памяти. То есть, если есть alloc — обязательно должен быть release.

Давайте добавим еще пару строк:

<code data-result="[object Object]">NSString *formatString = [NSString stringWithFormat:@"Строка (%@) имеет длинну %i символов" ,
string1,  string1.length];
NSLog(@"%@",formatString);</code>

В этом примере мы создаем новый объект, используя метод stringWithFormat. Код, который следует после двоеточия вам скорее всего уже знаком, подобным образом мы выводили информацию в консоль.

<code data-result="[object Object]">NSLog(@"Строка (%@) имеет длинну %i символов" ,string1,  string1.length);</code>

Эти записи эквивалентны, разница лишь в том, что в первом случае мы храним строку в отдельном экземпляре и в дальнейшем сможем ее использовать. Вопрос может возникнуть в последней записи [string1 length] и string1.length — это так же один из методов классаNSString, который возвращает длинну строки.

В следующем примере мы поэкспериментируем с регистром:

<code data-result="[object Object]">NSString *lower = [@"LOWER CASE ME" lowercaseString];
NSString *capitalize = [@"capitalize me" capitalizedString];
NSLog(@"%@", lower);
NSLog(@"%@", capitalize);</code>

Добавьте этот код в проект и посмотрите как изменяется строка в зависимости от того метода, который мы использовали. Важно понимать, что эти методы создают новую строку на основании уже имеющейся.

Имея на вооружении следующий пример, вы легко сможете красиво оформить вывод любого результата:

<code data-result="[object Object]">NSString *s1 = [@"Weight bench: "stringByPaddingToLength:20withString:@" "startingAtIndex:0];
NSString *s2 = [@"Bicycle: "stringByPaddingToLength:20withString:@" "startingAtIndex:0];
NSString *s3 = [@"Painting: "stringByPaddingToLength:20withString:@" "startingAtIndex:0];
NSLog(@"%@ %@", s1, @"");
NSLog(@"%@ %@", s2, @"");
NSLog(@"%@ %@", s3, @"");</code>

Метод stringByPaddingToLength добавляет к строке символ (в нашем случает это пробел), который вы указали в параметре этого метода до тех пор, пока строка не будет равна той длинне, которую вы указали в параметре, а потом возвращает нам новую строку.

Для того чтобы узнать начинается ли строка с подстроки или заканчивается ней существуют соответственные методы:

<code data-result="[object Object]">BOOL prefix = [@"http://imaladec.com"hasPrefix:@"http"];
BOOL suffix = [@"http://imaladec.com"hasSuffix:@".com"];
NSLog(@"Has prefix? %i" ,prefix);
NSLog(@"Has suffix? %i" ,suffix);</code>

Результат работы этого кода не слишком приветлив. Используя наши знания, давайте сделаем его приятней:

<code data-result="[object Object]">NSLog(@"Has prefix? %@" ,prefix? @"YES" : @"NO");
NSLog(@"Has suffix? %@" ,suffix? @"YES" : @"NO");</code>

Я надеюсь, вы не забыли о сокращенной конструкции условного оператора. Можете только представить, сколько было бы кода, если бы мы использовали полную конструкцию этого оператора…

Строки — это хорошо, но как сравнить две строки? Для этого у нас есть метод isEqualToString.

<code data-result="[object Object]">NSString *s4 = @"Bill";
NSString *s5 = @"John";
BOOL equal = [s4 isEqualToString:s5];
NSLog(@"Strings is equal? %@", equal? @"YES" : @"NO");</code>

На последок хотелось бы рассказать об очень полезном методе componentsSeparatedByString.

<code data-result="[object Object]">NSString *students = @"Tom, Bill, Joe";
NSArray *sArray = [students componentsSeparatedByString:@", "];
NSLog(@"%@", sArray);</code>

Этот метод возвращает массив (о массивах в следующей статье). Для создания массива используется разделитель, который мы передаем в параметре этого метода.

Я продемонстрировал вам основные методы класса NSString. Если у вас возникают вопросы — можете смело их задавать в комментариях и я буду дополнять статью.

Исходный код можно скачать здесь.

Comments are closed.