This could make use of `+enumeratePropertiesUsingBlock:` if it was refactored to pass in the class