0

カテゴリを介して調整された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

4

2 に答える 2

3

新しいNSStringを作成する必要はありません。メソッドは、すでにそれを行っています。

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

NSStringは不変であるため、次のように割り当てる必要があります。

yourString = [yourString xTrim];
于 2012-11-23T12:31:02.777 に答える
3

のカテゴリではこれを行うことはできません。これは、不変の文字列を管理するNSStringためです。つまり、文字列の作成後に変更することはできません。NSString

あなたはそれをカテゴリとして実装することができます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ます:いいえ、それは不可能です。

于 2012-11-23T12:59:39.933 に答える