Yaml

Build Status Swift Version

使用 Swift 加载 YAMLJSON 文档。

Yaml 解析 YAML 文档(或 JSON 文档)的字符串,并返回代表该字符串的 Yaml 枚举值。

安装

使用 Carthage 构建和安装。

或者使用 CocoaPods:将 pod 'Yaml' 添加到您的 Podfile 中,并运行 pod install

API

导入

要使用它,您应该使用以下语句导入它

import Yaml

Yaml

Yaml 值可以是以下任何一种情况

enum Yaml {
  case null
  case bool(Bool)
  case int(Int)
  case double(Double)
  case string(String)
  case array([Yaml])
  case dictionary([Yaml: Yaml])
}

Yaml.load

Yaml.load (String) throws -> Yaml

接受 YAML 文档的字符串,并返回一个 Yaml 枚举。

let value = try! Yaml.load("a: 1\nb: 2")
print(value["a"])  // Int(1)
print(value["b"])  // Int(2)
print(value["c"])  // Null

如果输入文档无效或包含多个 YAML 文档,则会抛出错误。

do {
  let value = try Yaml.load("a\nb: 2")
}
catch {
  print(error)  // expected end, near "b: 2"
}

Yaml.loadMultiple

Yaml.loadMultiple (String) throws -> [Yaml]

接受一个或多个 YAML 文档的字符串,并返回 [Yaml]

let value = try! Yaml.loadMultiple("---\na: 1\nb: 2\n---\na: 3\nb: 4")
print(value[0]["a"])  // Int(1)
print(value[1]["a"])  // Int(3)

如果在任何文档中遇到错误,它将抛出错误。

Yaml#[Int] -> Yaml

value[Int] -> Yaml
value[Int] = Yaml

如果在 Yaml.array 值上使用,它将返回指定索引处的值。如果索引无效或该值不是 Yaml.array,则返回 Yaml.null。您也可以在特定索引处设置一个值。 将添加足够的元素以设置指定的索引。 如果该值不是 Yaml.array,则设置后它将更改为 Yaml.array

var value = try! Yaml.load("- Behrang\n- Maryam")
print(value[0])  // String(Behrang)
print(value[1])  // String(Maryam)
print(value[2])  // Null
value[2] = "Radin"
print(value[2])  // String(Radin)

Yaml#[Yaml] -> Yaml

value[Yaml] -> Yaml
value[Yaml] = Yaml

如果在 Yaml.dictionary 值上使用,它将返回指定键的值。如果指定键的值不存在,或者该值不是 Yaml.dictionary,则返回 Yaml.null。您也可以为特定键设置一个值。 如果该值不是 Yaml.dictionary,则设置后它将更改为 Yaml.dictionary

由于 Yaml 是一个字面量可转换类型,因此您可以将简单值传递给此方法。

var value = try! Yaml.load("first name: Behrang\nlast name: Noruzi Niya")
print(value["first name"])  // String(Behrang)
print(value["last name"])  // String(Noruzi Niya)
print(value["age"])  // Null
value["first name"] = "Radin"
value["age"] = 1
print(value["first name"])  // String(Radin)
print(value["last name"])  // String(Noruzi Niya)
print(value["age"])  // Int(1)

Yaml#bool

value.bool -> Bool?

返回一个 Optional<Bool> 值。 如果该值是 Yaml.bool 值,则返回包装的值。 否则返回 nil

let value = try! Yaml.load("animate: true\nshow tip: false\nusage: 25")
print(value["animate"].bool)  // Optional(true)
print(value["show tip"].bool)  // Optional(false)
print(value["usage"].bool)  // nil

Yaml#int

value.int -> Int?

返回一个 Optional<Int> 值。 如果该值是 Yaml.int 值,则返回包装的值。 否则返回 nil

let value = try! Yaml.load("a: 1\nb: 2.0\nc: 2.5")
print(value["a"].int)  // Optional(1)
print(value["b"].int)  // Optional(2)
print(value["c"].int)  // nil

Yaml#double

value.double -> Double?

返回一个 Optional<Double> 值。 如果该值是 Yaml.double 值,则返回包装的值。 否则返回 nil

let value = try! Yaml.load("a: 1\nb: 2.0\nc: 2.5\nd: true")
print(value["a"].double)  // Optional(1.0)
print(value["b"].double)  // Optional(2.0)
print(value["c"].double)  // Optional(2.5)
print(value["d"].double)  // nil

Yaml#string

value.string -> String?

返回一个 Optional<String> 值。 如果该值是 Yaml.string 值,则返回包装的值。 否则返回 nil

let value = try! Yaml.load("first name: Behrang\nlast name: Noruzi Niya\nage: 33")
print(value["first name"].string)  // Optional("Behrang")
print(value["last name"].string)  // Optional("Noruzi Niya")
print(value["age"].string)  // nil

Yaml#array

value.array -> [Yaml]?

返回一个 Optional<Array<Yaml>> 值。 如果该值是 Yaml.array 值,则返回包装的值。 否则返回 nil

let value = try! Yaml.load("languages:\n - Swift: true\n - Objective C: false")
print(value.array)  // nil
print(value["languages"].array)  // Optional([Dictionary([String(Swift): Bool(true)]), Dictionary([String(Objective C): Bool(false)])])

Yaml#dictionary

value.dictionary -> [Yaml: Yaml]?

返回一个 Optional<Dictionary<Yaml, Yaml>> 值。 如果该值是 Yaml.dictionary 值,则返回包装的值。 否则返回 nil

let value = try! Yaml.load("- Swift: true\n- Objective C: false")
print(value.dictionary)  // nil
print(value[0].dictionary)  // Optional([String(Swift): Bool(true)])

Yaml#count

value.count -> Int?

返回一个 Optional<Int> 值。 如果该值是 Yaml.arrayYaml.dictionary 值,则返回元素的计数。 否则返回 nil

let value = try! Yaml.load("- Swift: true\n- Objective C: false")
print(value.count)  // Optional(2)
print(value[0].count)  // Optional(1)
print(value[0]["Swift"].count)  // nil

许可证

MIT