// // // // // public protocol KeyPathReflectable { func reflect(allKeyPaths keyPaths: inout [PartialKeyPath]) func reflect(allKeyPaths keyPaths: inout [String: PartialKeyPath]) } extension KeyPathReflectable { @inlinable subscript(mirrorDescendant key: String) -> Any { Mirror(reflecting: self).descendant(key)! } public func reflect(allKeyPaths keyPaths: inout [PartialKeyPath]) { let mirror = Mirror(reflecting: self) for case let (label?, _) in mirror.children { keyPaths.append(\Self.[mirrorDescendant: label] as PartialKeyPath) } } public func reflect(allKeyPaths keyPaths: inout [String: PartialKeyPath]) { let mirror = Mirror(reflecting: self) for case let (label?, _) in mirror.children { keyPaths[label] = \Self.[mirrorDescendant: label] as PartialKeyPath } } }