It seems like we could share the bulk of the implementations with some private method like, `+switch:cases:useDefault:default:` or something.