Swift 4.2 MIT LiCENSE CI via GitHub Actions

swift-sion

SION 在 Swift 中的处理库。

概要

import SION
var sion:SION = [
    "nil":      nil,
    "bool":     true,
    "int":      -42,
    "double":   42.195,
    "string":   "漢字、カタカナ、ひらがなの入ったstring😇",
    "array":    [nil, true, 1, 1.0, "one", [1], ["one":1.0]],
    "dictionary":   [
        "nil":nil, "bool":false, "int":0, "double":0.0, "string":"","array":[], "object":[:]
    ],
    "url":"https://github.com/dankogai/"
]
sion["data"] = .Data("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
sion["date"] = .Date(0x0p+0)
sion["ext"]  = .Ext("1NTU") // 0xd4,0xd4,0xd4

该模块既是对 SION 的介绍,也是其参考实现。SION 是一种数据序列化格式,类似于 JSON,但功能更强大、更具表现力。 正如 JSON 源于 {ECMA,Java}Script 字面量,SION 源于 Swift 字面量。 因此,正如 JSON 以 JavaScript 对象表示法命名一样,SION 以 Swift 可互换对象表示法命名。 但正如其名称所暗示的那样,SION 与 JSON 一样,是语言无关的。

SION 可以序列化 JSON 可以序列化的任何内容,并且还支持:

类型 SION MsgPack JSON 属性列表 (Property List) 注释
Nil ✔︎ ✔︎ ✔︎ plist: 仅限 .binary
Bool ✔︎ ✔︎ ✔︎ ✔︎
Int ✔︎ ✔︎ ✔︎ 64位
Double ✔︎ ✔︎ ✔︎ ✔︎ JSON 的 Number
String ✔︎ ✔︎ ✔︎ ✔︎ utf-8 编码
Data ✔︎ ✔︎ ✔︎ 二进制 blob
Date ✔︎ ✔︎ ✔︎ .timeIntervalSince1970, Double 类型表示
[Self] ✔︎ ✔︎ ✔︎ ✔︎ 又名 Array (数组)
[String:Self] ✔︎ ✔︎ ✔︎ ✔︎ 又名 Object (对象), Map (映射)...
[Self:Self] ✔︎ ✔︎ String 类型的键
Ext ✔︎ ✔︎ msgpack 扩展

有关格式详情,请参阅 SION 的主页。

描述

现在位于 DESCRIPTION.md

用法

构建

$ git clone https://github.com/dankogai/swift-sion.git
$ cd swift-sion # the following assumes your $PWD is here
$ swift build

REPL (交互式解释器)

简单地

$ swift run --repl

$ scripts/run-repl.sh

然后在你的 repl 中,

  1> import SION
  2> let sion:SION = ["swift":["safe","fast","expressive"]]
sion: SION.SION = Object {
  Object = 1 key/value pair {
    [0] = {
      key = "swift"
      value = Array {
        Array = 3 values {
          [0] = String {
            String = "safe"
          }
          [1] = String {
            String = "fast"
          }
          [2] = String {
            String = "expressive"
          }
        }
      }
    }
  }
}

Xcode

Xcode 项目被有意地从仓库中排除,因为它应该通过 swift package generate-xcodeproj 生成。 为方便起见,你可以

$ scripts/prep-xcode

然后工作区会打开,Playground 在最上面。 该 playground 被编写为手册。 要运行,请确保在 Playground Setting 中将位置设置为 Relative to Playground

iOS 和 Swift Playground

不幸的是,Swift Package Manager 不支持 iOS。 更糟糕的是,Swift Playgrounds 不支持模块。 但别担心。 这个模块非常紧凑,你只需要复制 SION.swift

对于 Swift Playgrounds,只需将其复制到 Sources 文件夹下即可。 如果你太懒,只需运行

$ scripts/ios-prep.sh

并且 iOS/JSON.playground 就设置好了。 你不必在其中 import JSON

该 playground 与 iOS 完全兼容。 通过 iCloud 云盘同步,尽情享受吧!

从你的 SwiftPM 管理的项目中

将以下内容添加到 dependencies 部分

.package(
  url: "https://github.com/dankogai/swift-sion.git", from: "0.0.0"
)

并将以下内容添加到 .target 参数

.target(
  name: "YourSwiftyPackage",
  dependencies: ["SION"])

现在你所要做的就是

import SION

在你的代码中。 尽情享受吧!

前提条件

Swift 5 或更高版本,OS X 或 Linux 用于构建。