Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
noname_club
107 / 98 / 12
Регистрация: 01.05.2013
Сообщений: 603
1

Экспресс строки

28.05.2014, 18:56. Просмотров 829. Ответов 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
0
Вложения
Тип файла: zip test_macro_string.zip (35.0 Кб, 18 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 18:56
Ответы с готовыми решениями:

Экспресс-блоки
Здравствуйте! Может кто подскажет. word 2007. как сделать свои экспресс-блоки,...

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

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

Экспресс-панель Opera
Добрый день. Опера 45. Я добавляю нужные сайты на экспресс-панель (первые три...

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

2
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
28.05.2014, 20:36 2
О, новые дефайны. Круто! Надо бы отдельный проект создать, куда можно будет помещать все ваши дефайны. Или он у вас уже есть?
0
noname_club
107 / 98 / 12
Регистрация: 01.05.2013
Сообщений: 603
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":"Волгоград"
            }
]}
1
Вложения
Тип файла: zip test_macro_string2.zip (35.2 Кб, 2 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2014, 15:40

Экспресс-панель в Chrome
Здравствуйте. Как обновить эскизы страниц на экспресс-панели? Просто уже старые...

Экспресс панель без ссылок
В один прекрасный день я решил посетить просторы интернета. Открыл оперу и...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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