ReflectedStringConvertible 1.2.0

ReflectedStringConvertible 1.2.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最新发布2017年12月
SwiftSwift 版本4.0
SPM支持 SPM

Matt Comi维护。



  • Matt Comi

ReflectedStringConvertible

一个扩展了CustomStringConvertible并使用反射为任何类添加详细文本表示的协议。支持两种风格:

  1. normal:类似于Swift对结构的默认文本表示。
  2. json:漂亮的JSON表示。

使用方法

简单地导入ReflectedStringConvertible并遵从ReflectedStringConvertible协议

import ReflectedStringConvertible

class YourClass: ReflectedStringConvertible {
  // that's all.
}

例如

class Person: ReflectedStringConvertible {
  var name: String
  var age: Int

  init(name: String, age: Int) {
    self.name = name
    self.age = age
  }
}

print(Person(name: "Matt", age: 33))输出

Person(name: "Matt", age: 33)

可以使用reflectedDescription(style:)指定风格。默认风格是normal。也就是说,调用description与调用reflectedDescription(.normal)相同。

例如,print(Person(name: "Matt", age: 33).reflectedDescription(.json))输出

{
  "age" : 33,
  "name" : "Matt"
}

有关更多信息,请参阅API文档

功能

ReflectedStringConvertible存储属性

具有ReflectedStringConvertible存储属性的ReflectedStringConvertible对象可以正确处理

class Movie: ReflectedStringConvertible {
  var title: String
  var year: Int

  // another ReflectedStringConvertible
  var director: Person

  init(title: String, year: Int, director: Person) {
    self.title = title
    self.year = year
    self.director = director
  }
}

let george = Person(name: "George Miller", age: 71)
let movie = Movie(title: "Mad Max", year: 2015, director: george)

print(movie.reflectedDescription(.normal))(或直接print(movie))输出

Movie(title: "Mad Max", year: 2015, director: Person(name: "George Miller", age: 71))

并且print(movie.reflectedDescription(.json))输出

{
  "title" : "Mad Max",
  "year" : 2015,
  "director" : {
    "age" : 71,
    "name" : "George Miller"
  }
}

集合

ReflectedStringConvertible对象在ArrayDictionarySet集合中可正确处理

class Series: ReflectedStringConvertible {
  var title: String
  var cast: [Person]

  init(title: String, cast: [Person]) {
    self.cast = cast
  }
}

var cast = [Person]()

cast.append(Person(name: "Justin Theroux", age: 44))
cast.append(Person(name: "Carrie Coon", age: 35))

let series = Series(title: "The Leftovers", cast: cast)

print(series)输出

TVShow(title: "The Leftovers", cast: [Person(name: "Justin Theroux", age: 44), Person(name: "Carrie Coon", age: 35)])

print(series.reflectedDescription(.json))输出

{
  "title" : "The Leftovers",
  "cast" : [
    {
      "age" : 44,
      "name" : "Justin Theroux"
    },
    {
      "age" : 35,
      "name" : "Carrie Coon"
    }
  ]
}

鸣谢

由Matt Comi(@mattcomi)开发