专栏首页大话swift二 iOS模版引擎--Stencil
原创

二 iOS模版引擎--Stencil

image.png

GitHub链接

简略语法:

There are {{ articles.count }} articles.

<ul>
  {% for article in articles %}
    <li>{{ article.title }} by {{ article.author }}</li>
  {% endfor %}
</ul>
import Stencil

struct Article {
  let title: String
  let author: String
}

let context = [
  "articles": [
    Article(title: "Migrating from OCUnit to XCTest", author: "Kyle Fuller"),
    Article(title: "Memory Management with ARC", author: "Kyle Fuller"),
  ]
]

let environment = Environment(loader: FileSystemLoader(paths: ["templates/"]))
let rendered = try environment.renderTemplate(name: "article_list.html", context: context)

print(rendered)

简单使用

import UIKit
import Stencil
import PathKit
import WebKit
@objc
public class StencilEngine: NSObject {
    let environment:Environment
    let localBundle: Bundle
    @objc public      init( bundlePath: String) {
        localBundle = Bundle.init(path: bundlePath)!
         environment = Environment(loader: FileSystemLoader.init(bundle: [ self.localBundle, Bundle.main]))

    }
    
    @objc public func render(for webView: UIWebView,  templateFileName: String, bundle: Bundle , context:[String:Any]?)throws-> String{
        do{

        let html = try environment.renderTemplate(name: templateFileName, context: context)
                webView.loadHTMLString(html, baseURL: self.localBundle.bundleURL)
            return html
        }catch{
            throw error
        }
    }
    
    @objc public func render(forUiWebView webView: UIWebView,  templateFileName: String, bundle: Bundle , context:[String:Any]?)throws-> String{
        do{
            
            let html = try environment.renderTemplate(name: templateFileName, context: context)
            webView.loadHTMLString(html, baseURL: self.localBundle.bundleURL)
            return html
        }catch{
            
            throw error
        }
    }
    
    
}

调用

 StencilEngine * engine = [[StencilEngine alloc] initWithBundlePath:_bundlePath];
    
    _html =       [engine renderFor:self.webView
                             templateFileName:self.templateFileName bundle:[[NSBundle alloc] initWithPath:_bundlePath] context:jsonObj error:&engineError];
    
    if (engineError) {
        [self showError:engineError];
    }

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS 模版引擎加速web预览

    在iOS开发中大家对于有些功能和模块不可避免的需要使用HTML来加速开发和实现功能的快速变更,例如:预览和活动页面。 基于需求的不断变更大家很多采用的H5来做,...

    大话swift
  • playground 简易json字符串转化Model

    最近被公司超长的json【惊悚】给烦死了,趁着午休简易写了一个,还有很多改进之处,慢慢完善吧

    大话swift
  • 房贷选择之策略模式

    之前我们说了房贷计算,资讯了icbc,给出了你大致的每月房贷明细,也给出了你N中贷款方式,那么今天我们就扯一下贷款选哪种方式吧。 1 商贷 2公积金 3组合贷款...

    大话swift
  • iOS 模版引擎加速web预览

    在iOS开发中大家对于有些功能和模块不可避免的需要使用HTML来加速开发和实现功能的快速变更,例如:预览和活动页面。 基于需求的不断变更大家很多采用的H5来做,...

    大话swift
  • Flink 中这样管理配置,你知道?

    如果你了解 Apache Flink 的话,那么你应该熟悉该如何像 Flink 发送数据或者如何从 Flink 获取数据。但是在某些情况下,我们需要将配置数据发...

    zhisheng
  • 微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决

    异常java.security.InvalidKeyException:illegal Key Size 也就是 echostr校验失败,请您检查是否正确解密并...

    小帅丶
  • java开发_""和null的区别

    Hongten
  • 远程mysql_java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect

    其实道理很简单,也就是说,远程的机器B不允许机器A访问他的数据库。也就是说,我们要解决这个问题,就是要让机器B的数据库允许

    Hongten
  • 聊聊JAVA中 String类为什么不可变

    前言 "我的风格比较偏传统和经典" 小明说,"我们在打扮自己的问题上还是蛮冒险的...我觉得当你是只狗的时候,穿什么都hold的住!" ? 哈哈哈,脱离单身狗快...

    小柒2012
  • 聊聊JAVA中 String类为什么不可变

    String不可变这个话题应该是老生长谈了,你可以说它就是设计者的龟腚,然后巴拉巴拉说出一大堆优点,也可以说它忠于爱情,只要JVM存活,它便万年不变。

    小柒2012

扫码关注云+社区

领取腾讯云代金券