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

Objective-C

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

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

28.05.2014, 18:56. Просмотров 751. Ответов 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
Углубленная экспресс литература по С++ C++
MS Word Экспресс-блоки в MS WORD

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
28.05.2014, 20:36     Экспресс строки #2
О, новые дефайны. Круто! Надо бы отдельный проект создать, куда можно будет помещать все ваши дефайны. Или он у вас уже есть?
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
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     Экспресс строки
Ответ Создать тему
Опции темы

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