extension String { func camelCaseToSnakeCase() -> String { var result = "" var lastCharacterWasUppercase = false for character in self { if character.isUppercase { if !result.isEmpty && !lastCharacterWasUppercase { result.append("_") } result.append(character.lowercased()) lastCharacterWasUppercase = true } else { result.append(character) lastCharacterWasUppercase = false } } return result } }