Встроенная система шаблонов Objective-C? - PullRequest
6 голосов
/ 29 марта 2010

Я разрабатываю приложение для 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>

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

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

Ответы [ 7 ]

8 голосов
/ 29 марта 2010

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

<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"];

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

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

3 голосов
/ 02 апреля 2011

https://github.com/groue/GRMustache может вам помочь.

2 голосов
/ 08 августа 2013

Вот облегченный шаблонизатор для target-c: CCTemplate

2 голосов
/ 07 апреля 2012
2 голосов
/ 29 марта 2010

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

0 голосов
/ 25 мая 2017

In Swift 3.1

var fn: String = "\(Bundle.main.resourcePath)/my_template.tpl"
// template
var error: Error?
var template = try? String(contentsOfFile: fn, encoding: String.Encoding.utf8)
    // result
var result = String(format: template, "MyTitle", "MyText")
0 голосов
/ 03 июня 2014

Для многих из вас это маловероятный вариант, но мне нужны были шаблоны для генерации кода и я решил использовать java + ftp, http://freemarker.org/libraries.html

В итоге у меня появился инструмент для генерации табличных представлений, представлений форм, коллекций, интеграции с накопителем Google на основе файла модели данных xcdatamodeld.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...