CircleCI platform SPM swift

NutView

一款令人惊艳的Web开发模板语言,用于 Swift Squirrel Web框架(参见:Swift Squirrel

安装

在您的 Package.swift 文件中添加 NutView 作为依赖项

// swift-tools-version:4.0

import PackageDescription

let package = Package(
    name: "Your app",
    products: [
        // Your products
    ],
    dependencies: [
        .package(url: "https://github.com/Swift-Squirrel/NutView.git", from: "1.0.2"),
        // Other dependencies
    ],
    targets: [
        .target(
            name: "Your Target",
            dependencies: [..., "NutView"]),
    ]
)

并在源代码中添加 import 语句

import NutView

使用

NutView 在 .nut.html 文件中使用特殊的类似 Swift 的语法,这为 Swift 开发者提供了极佳的可读性。

目录结构

NutView 使用两个重要的目录。

您可以使用以下方法更改这些目录:

NutConfig.nuts = "SomeDir/SomeAnotherDir1/NutsDir"
NutConfig.fruits = "SomeDir/SomeAnotherDir2/FruitDir"

Nuts/Views

包含页面特定内容。例如,如果我们有一个博客,并且我们想要有一个包含特定帖子的页面,那么我们的视图将只包含帖子信息,而不包含布局、头部、尾部等...

Nuts/Subview

包含页面的可重用部分。例如,头部或尾部。

Nuts/Layout

这实际上是我们的 Web 布局。您可以从 Views 引用布局,这会将 View 内容固定到 Layout 中 \View() 所在的位置。

命令

命令以 \ 符号开头。您可以使用 \\ 转义 \ 符号

名称 语法 语义
表达式 \(<expression>) 评估括号中的表达式并转义 HTML 字符
原始表达式 \RawValue(<expression>) 评估表达式
块结束 \} 指示 if、for 语句中的块结束
If
Else if
Else
\if <expression> {
\} else if <expression> {
\} else {
如果表达式为 true,则运行给定块中的命令,否则运行 else if 或 else 块(如果存在)
If let
Else if let
\if let <variableName> = <expression> {
\} else if let <variableName> = <expression> {
如果表达式不是 nil,则将结果存储在 variableName 中,并运行给定块中的命令,否则运行 else if 或 else 块(如果存在)
Subview \Subview(<expression>) 在此命令的位置添加给定子视图的内容。注意:name 使用点表示法,因此不要写 MySubviewSubdirectory/Mysubview.nut.html,而是写 MySubviewSubdirectory.Mysubview
For \for <variable> in <Array>
\for (<key>, <value>) in <Dictionary>
迭代数组 ([Any]) 或字典 ([String: Any])
Date \Date(<expression>)
\Date(<expression>, fromat: <expression>)
评估表达式并以给定格式打印日期。如果未设置 format,NutView 将使用在 NutConfig.dateDefaultFormat: String { set get } 中指定的默认日期格式
Layout \Layout(<expression>) 将 View 引用到 Layout。 name 使用点表示法,因此不要写 MyLayoutSubdirectory/MyLayout.nut.html,而是写 MyLayoutSubdirectory.MyLayout
Title \Title(<expression>) 设置 HTML 文档的 <title><\title> 头部
Head \Head(<expression>) 将表达式结果添加到 HTML head 标签中
Body \Body(<expression>) 将表达式结果添加到 HTML body 标签的末尾
View \View() 指示放置 View 的位置

注意: 对于评估表达式,我们使用 Evaluation

隐式变量

有些变量是隐式的,因此您不必将其作为数据发送。

示例

Sources/main.swift

import NutView

let indexView = View(name: "Index") // We don't have to write .nut.html 
let indexContent = try indexView.getContent()
print(indexContent) // prints generated content of index

struct PostData {
    let title: String,
    let body: String,
    let isNew: Bool
}
let postData = PostData(title: "Squirrels", body: "Squirrels are best!", isNew: false)
let postView = try View(name: "Posts.Post", with: postData) // note we write . instead of /
let postContent = try postView.getContent()
print(postContent) // prints generated content of page with given data

let postContentData = try postView.present() // Data representation of view

有关更多示例,请查看 ExamplesSquirrel docs -> Views

贡献

  1. Fork 它!
  2. 创建您的功能分支:git checkout -b my-new-feature
  3. 提交您的更改:git commit -am 'Add some feature'
  4. 推送到分支:git push origin my-new-feature
  5. 提交一个 pull request :D

作者

另请参阅 CONTRIBUTORS 以获取参与此项目的贡献者列表。

许可证

本项目根据 Apache License Version 2.0 许可证授权 - 有关详细信息,请参见 LICENSE 文件