Objective C встроенная шаблонная система?

Я разрабатываю приложение для iPhone, и я использую HTML для отображения форматированного текста.

Я часто отображаю ту же веб-страницу, но с другим содержанием. Я хотел бы использовать файл шаблона HTML и затем заполнить его моими различными значениями.

Интересно, имеет ли Objective C шаблонную систему, подобную ERB в Ruby.

Это позволило бы делать вещи как

Шаблон:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>{{{title}}}</H1>
    <P>{{{content}}}</P>
  </BODY>
</HTML>

Objective C (или чем это может быть в идеальном мире),

Template* template = [[Template alloc] initWithFile:@"my_template.tpl"];
[template fillMarker:@"title" withContent:@"My Title"];
[template fillMarker:@"content" withContent:@"My text here"];
[template process];
NSString* result = [template result];
[template release];

И строка результата содержала бы:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>My Title</H1>
    <P>My text here</P>
  </BODY>
</HTML>

Вышеупомянутый пример мог быть достигнут с некоторой текстовой заменой, но это будет болью для поддержания. Мне также было бы нужно что-то как циклы в шаблонах. Например, если бы у меня есть несколько объектов для отображения, я хотел бы генерировать несколько отделений.

Спасибо за чтение :)

6
задан Paresh Navadiya 9 November 2017 в 10:29
поделиться

2 ответа

Рассматривали ли вы возможность использования в качестве шаблона:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>%@</H1>
    <P>%@</P>
  </BODY>
</HTML>

А затем:

// just to get file name right
NSString* fn = 
    [NSString stringWithFormat:@"%@/my_template.tpl", 
              [[ NSBundle mainBundle ] resourcePath ]];
// template
NSError *error;
NSString* template = 
    [NSString stringWithContentsOfFile:fn 
              encoding:NSUTF8StringEncoding error:&error];
// result
NSString* result = 
    [NSString stringWithFormat:template, 
              @"MyTitle", 
              @"MyText"];

Я думаю, что это в значительной степени то, что вы хотите.

Конечно, вам придется добавить файлы шаблона в качестве ресурсов в проекте.

8
ответ дан 8 December 2019 в 17:20
поделиться

Нет, Objective-C не имеет встроенной системы шаблонов. Обычно для простых целей вы просто используете текстовую замену (возможно, через stringWithFormat: ), а для чего-то более продвинутого вы выбираете полноценную систему шаблонов, которая соответствует вашим потребностям.

2
ответ дан 8 December 2019 в 17:20
поделиться