Как я могу преобразовать строку в Camelcase - PullRequest
0 голосов
/ 25 мая 2019

Мне дана строка, которую я должен преобразовать в Case Camel и вернуть полученное значение из моей функции, используя вызовы в main.

// CaseMaker.h


    - (instancetype)initWithString:(NSString *)string;

    - (NSString *)process;

    @end

// main.m

    #import "CaseMaker.h"

    int main(int argc, const char * argv[]) {
  @autoreleasepool {
    CaseMaker *maker1 = [[CaseMaker alloc] initWithString:@"this is a string"];
    NSLog(@"%@", [maker1 process]);

    CaseMaker *maker2 = [[CaseMaker alloc] initWithString:@"loopy lighthouse"];
    NSLog(@"%@", [maker2 process]);
  }
  return 0;
}

Мне удалось преобразовать строки с пробелами в символы верхнего регистра, но я не могу сделать первый символ нижним регистром, также я прописываю строки из одного слова, которые я делаюне хочу делать.Документация для NSString не помогла так сильно, как я надеялся

.m

    - (NSString *)camelCaseFromString:(NSString *)input
    {
    return [[input capitalizedString]stringByReplacingOccurrencesOfString:@" " withString:@""];
    }

main

    CaseMaker *maker1 = [[CaseMaker alloc] camelCaseFromString:@"this is a string"];
    NSLog(@"%@", maker1);
    CaseMaker *maker2 = [[CaseMaker alloc] camelCaseFromString:@"loopy lighthouse"];
    NSLog(@"%@", maker2);
    CaseMaker *maker3 = [[CaseMaker alloc] camelCaseFromString:@"supercalifragalisticexpialidocious"];
    NSLog(@"%@", maker3);       
    CaseMaker *maker4 = [[CaseMaker alloc]camelCaseFromString:@"HELLO BRO"];
    NSLog(@"%@",maker4);

thisIsAString
loopyLighthouse
supercalifragalisticexpialidocious

Выше приведен ожидаемый результат для этого задания.Я гулял по Google, чтобы посмотреть, как другие люди подошли к этому, но не смог ничего найти, прочитал немного объективной документации c для методов NSString в верхнем и нижнем регистре и все еще не понимал, как мне поступить

1 Ответ

0 голосов
/ 25 мая 2019

Вот небольшая категория NSString, которая добавляет метод toCamelCase.

NSString + util.h:

#import <Foundation/Foundation.h>

@interface NSString(Util)

@property (readonly, copy) NSString *camelcaseString;

@end

NSString + Util.m:

#import "NSString+Util.h"

@implementation NSString(Util)

- (NSString *)camelcaseString {
    NSMutableString *res = [NSMutableString string];
    [[self componentsSeparatedByString:@" "] enumerateObjectsUsingBlock:^(NSString * _Nonnull string, NSUInteger idx, BOOL * _Nonnull stop) {
        [res appendString:idx == 0 ? [string lowercaseString] : [string capitalizedString]];
    }];

    return [res copy];
}

@end

Использование:

NSLog(@"%@", @"this is a string".camelcaseString);

Выход:

thisIsAString


В Swift вы можете создать расширение до StringProtocol:

extension StringProtocol {
    var camelcased: String {
        return components(separatedBy: " ").enumerated().map { $0 == 0 ? $1.lowercased() : $1.capitalized }.joined(separator: "")
    }
}

Использование:

print("this is a string".camelcased)
...