オブジェクトのすべてのプロパティと割り当てられた値をリストする便利なメソッドを書き込もうとしています(toString()
)。スウィフト3リフレクション - プロパティの反復
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"): , ]
まず、それが実際の値が、デフォルト値が表示されません。何故ですか? 次に、Optional
カプセル化を取り除く方法はありますか?ドキュメントによれば
'id'と' name'が 'Optional()'と表示されるのはなぜですか? –
@ニコラスミアリええ、それは私が思っているものです。 – BadmintonCat
child.labelを使用できます!オプションのカプセル化を取り除く – 3stud1ant3