Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
#1

Экспресс строки - Objective-C

28.05.2014, 18:56. Просмотров 764. Ответов 2
Метки нет (Все метки)

Покажу 2 макроса, которые можно использовать для Эскпресс построения строк

NSString+MacroExpress.h
Objective-C
1
2
3
4
5
6
7
8
9
10
11
#import <Foundation/Foundation.h>
 
@interface _NSStringMacroExpress_empty : NSObject
 
+(NSString*) getEmpty;
 
@end
 
#define m_strformat(str, ...) [NSString stringWithFormat:str, ## __VA_ARGS__ ]
 
#define m_str(...) [[NSArray arrayWithObjects: [_NSStringMacroExpress_empty getEmpty], ## __VA_ARGS__ , nil] componentsJoinedByString: [_NSStringMacroExpress_empty getEmpty]]
NSString+MacroExpress.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
#import "NSString+MacroExpress.h"
 
static NSString * _NSStringMacroExpress_empty_st = @"";
 
@implementation _NSStringMacroExpress_empty
 
+(NSString*) getEmpty {
    
    return _NSStringMacroExpress_empty_st;
}
 
@end
1) аналог [NSString stringWithFormat: ]

Objective-C
1
#define m_strformat(str, ...)
использование

Objective-C
1
2
NSString *z = m_strformat(@"%d + %d", 2 , 2);
NSLog(@"%@",z);
2014-05-28 18:42:43.805 test_macro_string[4651:90b] 2 + 2
2) макрос склеивания любого количества строк

Objective-C
1
#define m_str(...)
использование
Objective-C
1
2
3
4
5
6
7
8
9
    NSString * s1 = @"string1";
    NSString * s2 = @"string2";
    NSString * s3 = @"string3";
    NSString * s4 = @"string4";
    NSString * glue = @"###";
    
    z = m_str( s1, glue, s2, glue, s3, glue, s4 );
    
    NSLog(@"%@",z);
2014-05-28 18:49:34.817 test_macro_string[4668:90b] string1###string2###string3###string4
Вложения
Тип файла: zip test_macro_string.zip (35.0 Кб, 17 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 18:56     Экспресс строки
Посмотрите здесь:

Экспресс-блоки - MS Word
Здравствуйте! Может кто подскажет. word 2007. как сделать свои экспресс-блоки, такие же, как стандартные, находящиеся:...

Экспресс-панель в Chrome - Софт
Здравствуйте. Как обновить эскизы страниц на экспресс-панели? Просто уже старые картинки в эскизах, а автоматом не обновляются. А на...

Углубленная экспресс литература по С++ - C++
При всем риске оффтопить. Много лет назад писал на С++. После этого перепробовал кучу чего, последние несколько лет пишу на C#. Послал...

Антенны из али-экспресс - Радио
С недавних пор у нас появилось цифровое вещания и для его приема потребовалось приобретение усилителя DVB-T2 с помощью которого появилось...

Экспресс-блоки в MS WORD - MS Word
Добрый день! При выполнении одной задачи возник вопрос по экспресс-блокам MS WORD: Как мне пополнить список 15 основных свойств,...

Экспресс панель без ссылок - Софт
В один прекрасный день я решил посетить просторы интернета. Открыл оперу и экспресс панель. И ВОТ УЖАС!!! Висит голая экспресс панель с 9...

Экспресс панель в google chrome - Софт
Пропала экспресс панель в google chrome со всеми сохранёнными страницами на ней вместо этого теперь вот это

В документе не создается новый экспресс-стиль - MS Word
Выделяю текст, отформатированный нужным мне образом, далее &quot;Главная&quot; - раздел &quot;Стили&quot; - &quot;Сохранить выделенный фрагмент как новый...

Можно ли обновить экспресс-поля в колонтитулах? - VBA
В документе Word 2010 (.docm)сделана форматка основной надписи. В ней требуется обновить пользовательские экспресс-поля DocPropety....

Проблемка с экспресс-панелью в Опере о_О - Софт
Вот в чем проблемка: почему то при обновлении скрины закладок на экспресс-панели в браузере &quot;Опера 10.63&quot; стали какими-то странными......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
28.05.2014, 20:36     Экспресс строки #2
О, новые дефайны. Круто! Надо бы отдельный проект создать, куда можно будет помещать все ваши дефайны. Или он у вас уже есть?
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
06.08.2014, 15:40  [ТС]     Экспресс строки #3
Небольшие изменения

1) убран статический класс, объявлена статическая переменная
2) добавлен макрос для объявления ключей словарей перед циклами

таким образом при каждой итерации в цикле строка не создается заново что экономит ресурсы

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#import <Foundation/Foundation.h>
 
#pragma GCC diagnostic ignored "-Wundeclared-selector" // << отключение предупреждений
 
#ifndef m_strformat
 
extern NSString * const k_EmptyString;
 
// форматированная строка
 
#define m_strformat(str, ...) [NSString stringWithFormat:str, ## __VA_ARGS__ ]
 
// склеивание строк через запятую
 
#define m_str(...) [[NSArray arrayWithObjects: k_EmptyString, ## __VA_ARGS__ , nil] componentsJoinedByString: k_EmptyString]
 
// объявление строк для циклов (в конец имени всегда добавлять лишний символ)
// значение соотвествует имени переменной
 
#define varSTR(str) NSString * str = NSStringFromSelector(@selector(str)); str = [str substringToIndex:str.length-1]
 
// для совместимости со строками которые содержат пробелы и прочий невозможно-объявлемый мусор
 
#define varSTRV(str,value) NSString * str = value
 
#endif
пример использования макроса для объявления ключей словарей перед циклами

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    
    // получаем данные
    
    NSData * data = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"01.json" ofType:nil]];
    
    NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:0];
    
    // цикл
    
    varSTR(id_);
    varSTR(title_);
    varSTR(regions_);
    
    varSTRV(format1, @"str1: %@");
    varSTRV(format2, @"str2: %@");
    
    for (NSDictionary * item in json[regions_]) {
        NSLog(format1, item[id_]);
        NSLog(format2, item[title_]);
    }
ответ консоли

2014-08-06 15:20:06.248 test_macro_string[1316:90b] str1: 444
2014-08-06 15:20:06.250 test_macro_string[1316:90b] str2: Астана
2014-08-06 15:20:06.250 test_macro_string[1316:90b] str1: 683
2014-08-06 15:20:06.251 test_macro_string[1316:90b] str2: Барнаул
2014-08-06 15:20:06.251 test_macro_string[1316:90b] str1: 594
2014-08-06 15:20:06.251 test_macro_string[1316:90b] str2: Белгород
2014-08-06 15:20:06.252 test_macro_string[1316:90b] str1: 140
2014-08-06 15:20:06.252 test_macro_string[1316:90b] str2: Владивосток

...
Исходник json
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{"regions":[
            {
            "id":444,
            "title":"Астана"
            },
            {
            "id":683,
            "title":"Барнаул"
            },
            {
            "id":594,
            "title":"Белгород"
            },
            {
            "id":140,
            "title":"Владивосток"
            },
            {
            "id":446,
            "title":"Владимир"
            },
            {
            "id":109,
            "title":"Волгоград"
            }
]}
Вложения
Тип файла: zip test_macro_string2.zip (35.2 Кб, 1 просмотров)
Yandex
Объявления
06.08.2014, 15:40     Экспресс строки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru