Приведу несколько полезных функций, которые позволяют перевести в NSString разные структуры.

CGRect

Всем хорошо известна структура CGRect. Для того чтобы перевести CGRect в NSString можно воспользоваться функцией NSStringFromCGRect:

CGRect rect = CGRectMake(0, 0, 100, 100);

NSStirng* string = NSStringFromCGRect(rect);

Содержимое string будет следующим:

{{0, 0}, {100, 100}}

Т.е. с помощью NSStringFromCGRect мы получаем строковое представление CGRect. Существует и обратная функция CGRectFromString, которая из строкового представления вернет нам CGRect.

CGPoint

Такая же ситуация и с CGPoint. Чтобы получить строковое представление CGPoint можно воспользоваться функцией NSStringFromCGPoint. Как и в прошлом примере, существует обратная функция CGPointFromString.

CGSize

Данная возможность существует и у CGSize. Есть две функции NSStringFromCGSize и CGSizeFromString. Названия говорят сами за себя.

UIEdgeInsets и UIOffset

Для UIEdgeInsets можно использовать UIEdgeInsetsFromString и NSStringFromUIEdgeInsets. Для UIOffsetNSStringFromUIOffset и UIOffsetFromString.

Классы

Для того чтобы получить имя класса воспользуемся функцией NSStringFromClass. Чтобы получить класс по имени — NSClassFromString. Например:

NSString* className = NSStringFromClass([UIView class]);

NSLog(@"%@",className);

Выведет в консоль — UIView.

Получить класс из строки:

Class uiviewClass = NSClassFromString(@"UIView");

UIView* view = [[uiviewClass alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

Протоколы

Пример с протоколами:

NSString* protocolName = NSStringFromProtocol(@protocol(UITableViewDelegate)); // имя протокола

Protocol* p = NSProtocolFromString(protocolName); // получить протокол по имени

// проверим, следует ли self протоколу
if ( [self conformsToProtocol:p] )
NSLog(@"%@ confirms to protocol %@",NSStringFromClass([self class]),protocolName);
else
NSLog(@"%@ not confirms to protocol %@",NSStringFromClass([self class]),protocolName);

В консоли я получил следующее:

RootViewController not confirms to protocol UITableViewDelegate

Селекторы

Для селекторов мы можем использовать функции NSStringFromSelector и NSSelectorFromString.

Как видим, мы можем получать строковое представление некоторых структур и переводить строковое представление в саму структуру. Кто сомневается, что Class или селектор это структуры — загляните в файл objc.h и runtime.h ;)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *