feat: Allow iterating over tuple, struct and class properties

Closes #173
This commit is contained in:
Ilya Puchka
2017-12-27 22:13:33 +01:00
committed by Kyle Fuller
parent 0156f6f37b
commit c0e66eb96f
3 changed files with 95 additions and 0 deletions

View File

@@ -94,6 +94,22 @@ class ForNode : NodeType {
values = Array(range)
} else if let range = resolved as? CountableRange<Int> {
values = Array(range)
} else if let resolved = resolved {
let mirror = Mirror(reflecting: resolved)
switch mirror.displayStyle {
case .struct?, .tuple?:
values = Array(mirror.children)
case .class?:
var children = Array(mirror.children)
var currentMirror: Mirror? = mirror
while let superclassMirror = currentMirror?.superclassMirror {
children.append(contentsOf: superclassMirror.children)
currentMirror = superclassMirror
}
values = Array(children)
default:
values = []
}
} else {
values = []
}