iOS开发中字符串截取时出现的小问题及解决

朋友前几天跟我说一个需求,说是有几个按钮,点一下,就将按钮上的字添加到 一字符串中,再点一下就从这个字符串中删除按钮上的字。 需求不难,但在实现时我发现了几个需要注意的点,下边是代码:

//这样写程序有警告,而且会crash
- (void)test {
    NSString* str1 = @"XXX";
    NSString* str2 = @"I love you";
    NSMutableString* str = [str1 stringByAppendingString:str2];
    if ([str rangeOfString:str2].location != NSNotFound) {
        NSRange range = [str rangeOfString:str2];
        [str deleteCharactersInRange:range];
        NSLog(@"str=%@",str);
    }
}

上边的程序之所以崩溃,原因在于方法中第三行代码NSMutableString* str = [str1 stringByAppendingString:str2];因为stringByAppendingString: 方法是NSString.h的方法,他返回一个NSString,是不可变的,这样直接付给一个可变的字符串str,则会报警告,这样会导致str不可变。从而在进行删除操作时会崩溃。 下边是我修改后的代码:

- (void)test {
    NSString* str1 = @"XXXX";
    NSString* str2 = @"I love you";
    NSMutableString* str3 = [str1 stringByAppendingString:str2];
//只需在这里多写一步,调用NSMutableString的初始化方法用str3初始化str,这样便会正常生成可变字符串。
    NSMutableString* str = [NSMutableString stringWithString:str3];
    if ([str rangeOfString:str2].location != NSNotFound) {
        NSRange range = [str rangeOfString:str2];
        [str deleteCharactersInRange:range];
        NSLog(@"str=%@",str);
    }
}

关于可变于不可变属性的内容,可以参考我的博客

你可能感兴趣的:(OC语言,iOS开发)