尝试编写一个方便的root@SKYPHY:/usr/lib/python2.7/site-packages# python
Python 2.7.12 (default, Sep 7 2017, 15:21:53)
[GCC 4.8.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import dbus
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named dbus
方法,列出对象的所有属性及其赋值。
toString()
输出:
class FooModel
{
func toString() -> String
{
var result = "[\(String(describing: type(of: self))) "
let mirror = Mirror(reflecting: self)
mirror.children.forEach
{
child in
result += "\(child.label): \(child.value), "
}
return "\(result)]"
}
}
class FooProject : FooModel
{
var id = 0
var name = ""
var announcement:String?
var showAnnouncement = false
var isCompleted = false
var completedOn:String?
var suiteMode = 0
var url = ""
}
首先,它不会列出实际值,而是列出默认值。这是为什么?
第二,有没有办法摆脱[FooProject Optional("id"): 0, Optional("name"): , Optional("announcement"): nil, Optional("showAnnouncement"): false, Optional("isCompleted"): false, Optional("completedOn"): nil, Optional("suiteMode"): 0, Optional("url"): , ]
封装?
答案 0 :(得分:1)
根据Child
here的文档:
儿童强>
反射实例结构的元素。适当时可以使用任选的标签,例如,代表一个名字 存储属性或活动枚举大小写,将用于查找 当字符串传递给后代方法时。
因为镜像中的类型子项被定义为
typealias Child = (label: String?, value: Any)
因此,所有名称都打印为选项。
要获取标签名称,您可以使用可选绑定
我做了一些改变并在游乐场尝试了这个:
class FooModel
{
func toString() -> String
{
var result = "[\(String(describing: type(of: self))) "
let mirror = Mirror(reflecting: self)
mirror.children.forEach
{
child in
print(child)
if let label = child.label {
result += "\(label): \(child.value), "
}
}
return "\(result)]"
}
}
class FooProject : FooModel
{
var id = 0
var name = ""
var announcement:String!
var showAnnouncement = false
var isCompleted = false
var completedOn:String!
var suiteMode = 0
var url = ""
init(id: Int, name: String, completedOn: String) {
self.completedOn = completedOn
self.id = id
self.name = name
//...
}
}
let fooProj = FooProject(id: 10, name: "Name", completedOn: "Sunday")
print(fooProj.toString())
Ouptut是:
[FooProject id: 10, name: Name, announcement: nil, showAnnouncement: false, isCompleted: false, completedOn: Sunday, suiteMode: 0, url: , ]
HTH ..