Обрезать NSString специальных символов в методе установки в файле реализации в Objective-C - PullRequest
0 голосов
/ 01 июня 2019

У меня есть собственность

@property (strong,nonatomic) NSString *myString;

где я храню NSString, и это свойство во многих местах в файле реализации вызывается как self.myString.

Я столкнулся с проблемой, когда строка иногда содержит угловой апостроф, а не на клавиатуре QWERTY, и этот специальный символ отбрасывает сравнения строк.

С управляемым объектом вы можете использовать метод setter, чтобы что-то делать со свойством. Есть ли способ, которым я могу использовать метод set для преобразования углового апострофа в обычный апостроф в файле реализации.

Что-то вроде:

-(NSString*) myString {
    NSString * myString = [self stringByReplacingOccurrencesOfString:@"’" withString:@"'"];
}

Это смешанный проект Objc-Swift, поэтому, я думаю, я мог бы также добавить расширение для NSString в Swift, если это лучший способ сделать это.

Спасибо за любые предложения.

1 Ответ

1 голос
/ 01 июня 2019

Как установщик:

- (void)setMyString:(NSString *)aString {

    _myString=[aString stringByReplacingOccurrencesOfString:@"’" withString:@"'"];
}

Однако вы также можете оставить его обычным свойством, сохраняя его в точности как полученное, но предоставляя производное свойство, которое очистит строку. Пример:

- (NSString *)myStringSanitized {

    return [self.myString stringByReplacingOccurrencesOfString:@"’" withString:@"'"];
}

При желании, если ваш код использует наблюдение значения ключа (например, с привязками какао), вы также можете добавить его, чтобы уведомление об изменении вашей очищенной строки запускалось всякий раз, когда исходные исходные изменения:

+ (NSSet *)keyPathsForValuesAffectingMyStringSanitized {

    return [NSSet setWithObjects:@"myString",nil];
}

Теперь вы можете использовать self.myStringSanitized везде, где вам нужна очищенная версия вашей строки, но у вас по-прежнему есть неизмененная версия, доступная как self.myString.

...