ios - 在 Objective-C 的实现文件中的 setter 方法中去除 NSString 中的特殊字符

标签 ios objective-c nsstring setter

我有属性(property)

@property (strong,nonatomic) NSString *myString;

我存储 NSString 的位置,并且该属性在实现文件中的许多地方被称为 self.myString。

我遇到了一个问题,字符串有时包含一个带角度的撇号,而不是 QWERTY 键盘上的撇号,这个特殊字符会导致字符串比较失败。

对于托管对象,您可以使用 setter 方法对属性执行操作。有没有一种方法可以使用 setter 方法将有角度的撇号转换为实现文件中的常规撇号。

类似于:

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

这是一个混合 Objc-Swift 项目,所以我想我也可以在 Swift 中添加 NSString 的扩展,如果这是更好的方法的话。

感谢您的任何建议。

最佳答案

作为二传手:

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

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

但是,您也可以将其保留为常规属性,将其完全按照收到的方式存储,但提供可以清理字符串的派生属性。示例:

- (NSString *)myStringSanitized {

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

如果您的代码使用键值观察(例如使用 Cocoa Bindings),您还可以添加此内容以确保每当底层原始更改时都会触发已清理字符串的更改通知:

+ (NSSet *)keyPathsForValuesAffectingMyStringSanitized {

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

现在,您可以在任何需要字符串清理版本的地方使用 self.myStringSanitized,但您仍然可以使用未修改的版本作为 self.myString

关于ios - 在 Objective-C 的实现文件中的 setter 方法中去除 NSString 中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405922/

相关文章:

ios - 从我的 Parse 数据库中获取任意数量的 UserID 的最快方法

iphone - 将 $ 等特殊字符转换为十六进制

ios - 歌曲更改时如何更新 MPMusicPlayerController

ios - 从 UIViewController 添加 View

ios - 从 iOS 模拟器应用打开 Finder 窗口路径

cocoa-touch - "Whole word"通过 NSPredicate 在 NSString 中搜索

ios - 如何从 @"2011-11-22 03:20:39"获取 NSString 日期部分?

ios - UIView block 动画: how to put view back in initial state without a strange effect?

ios - 自动减少自身的NSNumber-1

ios - 为 GoogleMap objective-c 调用 API