Приведу несколько полезных функций, которые позволяют перевести в 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. Для UIOffset — NSStringFromUIOffset и 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
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: