Глава 5: Блоки (Blocks) в Objective-C ← Вернуться к списку глав Глава 7: Работа с данными в Objective-C

Глава 6: Фреймворк Foundation

Добро пожаловать в шестую главу нашего путешествия по Objective-C! В этой главе мы познакомимся с фреймворком Foundation — основой для разработки приложений на iOS и macOS. Этот фреймворк предоставляет множество полезных классов и функций, которые облегчают работу со строками, массивами, словарями, датами и многим другим. Не волнуйтесь, мы объясним все простым и понятным языком, чтобы вы могли легко во всем разобраться.


6.1. Что такое фреймворк Foundation?

Основы Foundation

Зачем использовать Foundation?


6.2. NSString: Работа со строками

Что такое NSString?

Создание строк

Создание строки с помощью литерала:

NSString *greeting = @"Привет, мир!";

Создание строки с помощью метода:

NSString *message = [NSString stringWithFormat:@"У вас %d новых сообщений", 5];

Основные методы NSString

Получение длины строки:

NSUInteger length = [greeting length];

Извлечение символа по индексу:

unichar character = [greeting characterAtIndex:0]; // Первый символ

Конкатенация строк:

NSString *fullName = [firstName stringByAppendingString:lastName];

Сравнение строк:

BOOL isEqual = [string1 isEqualToString:string2];

Преобразование в верхний или нижний регистр:

NSString *upperCase = [greeting uppercaseString];
NSString *lowerCase = [greeting lowercaseString];

Проверка содержимого строки

Проверка на префикс или суффикс:

BOOL startsWithHello = [greeting hasPrefix:@"Привет"];
BOOL endsWithWorld = [greeting hasSuffix:@"мир!"];

Поиск подстроки:

NSRange range = [greeting rangeOfString:@"мир"];
if (range.location != NSNotFound) {
    NSLog(@"Слово 'мир' найдено в строке");
}

6.3. NSArray и NSMutableArray: Массивы

NSArray: неизменяемый массив

Создание массива:

NSArray *fruits = @[@"Яблоко", @"Банан", @"Апельсин"];

Доступ к элементам:

NSString *firstFruit = fruits[0]; // "Яблоко"

Получение количества элементов:

NSUInteger count = [fruits count];

Перебор массива:

for (NSString *fruit in fruits) {
    NSLog(@"%@", fruit);
}

NSMutableArray: изменяемый массив

Создание изменяемого массива:

NSMutableArray *numbers = [NSMutableArray arrayWithObjects:@1, @2, @3, nil];

Добавление элементов:

[numbers addObject:@4];

Удаление элементов:

[numbers removeObjectAtIndex:0]; // Удаляет первый элемент

Вставка элементов:

[numbers insertObject:@0 atIndex:0]; // Вставляет 0 на первое место

Замена элементов:

[numbers replaceObjectAtIndex:1 withObject:@99];

6.4. NSDictionary и NSMutableDictionary: Словари

NSDictionary: неизменяемый словарь

Создание словаря:

NSDictionary *person = @{
    @"name": @"Иван",
    @"age": @30,
    @"city": @"Москва"
};

Доступ к значениям по ключу:

NSString *name = person[@"name"];
NSNumber *age = person[@"age"];

Получение всех ключей или значений:

NSArray *keys = [person allKeys];
NSArray *values = [person allValues];

NSMutableDictionary: изменяемый словарь

Создание изменяемого словаря:

NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];

Добавление пар "ключ-значение":

[userInfo setObject:@"Мария" forKey:@"firstName"];
[userInfo setObject:@"Иванова" forKey:@"lastName"];

Удаление значений по ключу:

[userInfo removeObjectForKey:@"lastName"];

Изменение значений:

[userInfo setObject:@"Петрова" forKey:@"lastName"];

6.5. NSSet и NSMutableSet: Наборы уникальных элементов

NSSet: неизменяемый набор

Создание набора:

NSSet *uniqueNumbers = [NSSet setWithObjects:@1, @2, @3, @1, @2, nil];

Проверка наличия элемента:

BOOL containsTwo = [uniqueNumbers containsObject:@2];

Получение количества элементов:

NSUInteger count = [uniqueNumbers count];

NSMutableSet: изменяемый набор

Создание изменяемого набора:

NSMutableSet *mutableSet = [NSMutableSet set];

Добавление и удаление элементов:

[mutableSet addObject:@"Красный"];
[mutableSet addObject:@"Зеленый"];
[mutableSet removeObject:@"Красный"];

Операции с наборами:


6.6. NSDate и NSDateFormatter: Работа с датой и временем

NSDate: представление даты и времени

Создание текущей даты:

NSDate *now = [NSDate date];

Создание даты с определенным интервалом:

NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:24*60*60]; // Через 24 часа

NSDateFormatter: форматирование дат

Создание форматтера:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd.MM.yyyy HH:mm:ss"];

Преобразование даты в строку:

NSString *dateString = [formatter stringFromDate:now];
NSLog(@"Текущая дата и время: %@", dateString);

Преобразование строки в дату:

NSString *input = @"31.12.2023 23:59:59";
NSDate *date = [formatter dateFromString:input];

Получение компонентов даты

Пример:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:now];

NSInteger year = [components year];
NSInteger month = [components month];
NSInteger day = [components day];

NSLog(@"Год: %ld, Месяц: %ld, День: %ld", (long)year, (long)month, (long)day);

6.7. NSFileManager: Управление файловой системой

Что такое NSFileManager?

Получение экземпляра NSFileManager

NSFileManager *fileManager = [NSFileManager defaultManager];

Пути к директориям

Получение пути к директории документов:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths firstObject];

Проверка существования файла

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"data.txt"];
BOOL fileExists = [fileManager fileExistsAtPath:filePath];

Создание директории

NSString *newDirectory = [documentsDirectory stringByAppendingPathComponent:@"NewFolder"];
NSError *error;

BOOL success = [fileManager createDirectoryAtPath:newDirectory withIntermediateDirectories:YES attributes:nil error:&error];

if (success) {
    NSLog(@"Директория создана");
} else {
    NSLog(@"Ошибка создания директории: %@", error.localizedDescription);
}

Запись данных в файл

NSString *content = @"Привет, файл!";
NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];

BOOL success = [fileManager createFileAtPath:filePath contents:data attributes:nil];

if (success) {
    NSLog(@"Файл создан");
} else {
    NSLog(@"Ошибка создания файла");
}

Чтение данных из файла

NSData *data = [fileManager contentsAtPath:filePath];
NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Содержимое файла: %@", content);

Удаление файла

NSError *error;
BOOL success = [fileManager removeItemAtPath:filePath error:&error];

if (success) {
    NSLog(@"Файл удален");
} else {
    NSLog(@"Ошибка удаления файла: %@", error.localizedDescription);
}

6.8. Практические задания

Задание 1: Работа со строками

  1. Создайте строку с вашим полным именем.
  2. Разделите строку на имя и фамилию, используя метод componentsSeparatedByString:.
  3. Выведите имя и фамилию отдельно.

Решение:

NSString *fullName = @"Иван Иванов";
NSArray *components = [fullName componentsSeparatedByString:@" "];
NSString *firstName = components[0];
NSString *lastName = components[1];

NSLog(@"Имя: %@", firstName);
NSLog(@"Фамилия: %@", lastName);

Задание 2: Управление массивами

  1. Создайте изменяемый массив с числами от 1 до 5.
  2. Добавьте число 6 в конец массива.
  3. Удалите число 2 из массива.
  4. Замените первое число на 0.
  5. Выведите итоговый массив.

Решение:

NSMutableArray *numbers = [NSMutableArray arrayWithObjects:@1, @2, @3, @4, @5, nil];
[numbers addObject:@6];
[numbers removeObject:@2];
[numbers replaceObjectAtIndex:0 withObject:@0];

NSLog(@"Массив: %@", numbers);

Задание 3: Работа со словарями

  1. Создайте словарь с информацией о книге: название, автор, год издания.
  2. Добавьте ключ "жанр" со значением "Роман".
  3. Измените год издания на текущий год.
  4. Выведите всю информацию о книге.

Решение:

NSMutableDictionary *book = [NSMutableDictionary dictionaryWithDictionary:@{
    @"title": @"Мастер и Маргарита",
    @"author": @"Михаил Булгаков",
    @"year": @1967
}];

[book setObject:@"Роман" forKey:@"genre"];
[book setObject:@2023 forKey:@"year"];

for (NSString *key in book) {
    NSLog(@"%@: %@", key, book[key]);
}

Задание 4: Форматирование даты

  1. Получите текущую дату.
  2. Отформатируйте дату в строку вида "31 декабря 2023 г., 23:59".
  3. Выведите полученную строку.

Решение:

NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd MMMM yyyy г., HH:mm"];

NSString *dateString = [formatter stringFromDate:now];
NSLog(@"%@", dateString);

Заключение

Отличная работа! Вы познакомились с основными классами фреймворка Foundation, которые являются фундаментальными для разработки приложений на Objective-C. Теперь вы знаете, как работать со строками, массивами, словарями, наборами, датами и файловой системой. Эти знания помогут вам создавать более функциональные и мощные приложения.


Что дальше?

В следующей главе мы продолжим наше путешествие и познакомимся с работой с данными: загрузкой из интернета, парсингом JSON, сохранением данных и многим другим. Это поможет вам создавать приложения, которые взаимодействуют с внешним миром и предоставляют пользователю актуальную информацию.

Не забывайте практиковаться! Чем больше вы будете писать код и экспериментировать, тем лучше будете понимать материал и тем увереннее будете чувствовать себя в роли разработчика.

Удачи и до встречи в следующей главе!

Глава 5: Блоки (Blocks) в Objective-C ← Вернуться к списку глав Глава 7: Работа с данными в Objective-C

Просмотров: 44