Skip to content

Instantly share code, notes, and snippets.

@naoty
Created May 18, 2014 08:59
Show Gist options
  • Save naoty/63eaa7d72b182dd9b85e to your computer and use it in GitHub Desktop.
Save naoty/63eaa7d72b182dd9b85e to your computer and use it in GitHub Desktop.
#import <Foundation/Foundation.h>
@interface NSString (Snakecase)
@property (nonatomic, readonly) NSString *snakecaseString;
@end
#import "NSString+Snakecase.h"
@implementation NSString (Snakecase)
- (instancetype)snakecaseString
{
NSString *scannedString;
NSMutableString *snakecaseString = [NSMutableString new];
NSCharacterSet *uppercaseLetterCharacterSet = [NSCharacterSet uppercaseLetterCharacterSet];
NSScanner *scanner = [NSScanner scannerWithString:self];
while (!scanner.isAtEnd) {
if ([scanner scanCharactersFromSet:uppercaseLetterCharacterSet intoString:&scannedString]) {
[snakecaseString appendString:scannedString.lowercaseString];
}
if ([scanner scanUpToCharactersFromSet:uppercaseLetterCharacterSet intoString:&scannedString]) {
[snakecaseString appendString:scannedString];
[snakecaseString appendString:@"_"];
}
}
return [snakecaseString stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"_"]];
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment