NSString类别的自我分配

时间:2012-11-23 12:24:41

标签: objective-c nsstring variable-assignment categories init

我想通过类别自行分配调整后的nsstring。 示例是修剪函数:

我不希望这样:

NSString *theTempString = [theExampleString xTrim];
// ... go on doing stuff with theTempString

我想这样:

[theExampleString xTrim];
// ... go on doing stuff with theExmapleString

该类别如下所示:

- (void)xTrim
{
    self = [self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

}

无法在init外部进行分配的错误 - 我理解这一点。 但是现在我对它很感兴趣,当然我可以编写一个自定义的init方法,但是没有办法像上面那样吗?

问候和感谢,

的Matthias

2 个答案:

答案 0 :(得分:3)

您不需要创建新的NSString,该方法已经为您完成了这项工作:

- (NSString *)xTrim
{
    return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}

NSString是不可变的,因此您需要分配它:

yourString = [yourString xTrim];

答案 1 :(得分:3)

您不能在NSString上的类别中执行此操作,因为NSString管理不可变字符串,这意味着字符串在创建后无法更改。< / p>

您可以在NSMutableString上将其实现为类别:

- (void)xTrim
{
    NSString *trimmed = [self stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
    [self setString:trimmed]; // replaces the characters of "self" with those of "trimmed".
}

如果您的问题是:我可以编写方法xTrim,以便

[theExampleString xTrim]

用新实例替换接收者theExampleString:不,这是不可能的。