测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最新发布 | 2017年12月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✗ |
由Matt Comi维护。
一个扩展了CustomStringConvertible
并使用反射为任何类添加详细文本表示的协议。支持两种风格:
normal
:类似于Swift对结构的默认文本表示。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
对象在Array
、Dictionary
和Set
集合中可正确处理
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)开发