如何缩进这个Objective-C代码?

时间:2011-05-16 20:37:45

标签: objective-c indentation

我有一个简单的问题。我如何缩进很长的一行。让我们使用传统的80个字符。 这是我的代码中的一行:

    NSString *count = [[NSString alloc] initWithString: [sTemp substringFromIndex:[sTemp rangeOfString:@"count="].location + [sTemp rangeOfString:@"count="].length]]; 

一个解决方案是

    NSString *count = [[NSString alloc]                                 //line 1
                            initWithString: [sTemp substringFromIndex:
                                [sTemp rangeOfString:@"count="].location + 
                                [sTemp rangeOfString:@"count="].length]]; 

这不是最好的样本,但想法是:

  1. 好的,第一行是赋值和分配的东西。
  2. 第2行缩进,右侧空间更大。但是,如果变量或类型的名称非常大,我将具有上述情况。我做了什么?

    NSStringWithVeryBigType *bigNameVariable = [NSStringWithVeryBigType alloc] 
                      initWithString: [sTemp substringFromIndex:
    
  3. 在第二行我创建一个新的NSString。如果第3行和第4行(在糟糕的情况下,不是这个)是主要的功能创建,或者是这个新功能,我可能会感到困惑。有一个很好的规则吗?如果它也有一个大名,又该怎么做......
  4. 换句话说,在一个大的任务线上,我必须休息什么规则?

3 个答案:

答案 0 :(得分:4)

不要试图将它们全部挤成一行。每当你有这样奇怪的嵌套调用时,为了可读性而制作一个或多个中间变量:

NSRange rng = [sTemp rangeOfString:@"count="];
NSUInteger indexAfterCount = rng.location + rng.length;
NSString * countSubString = [sTemp substringFromIndex:indexAfterCount];

NSStringSubclassWithReallyLongName * countString;
countString = [[NSStringSubclassWithReallyLongName alloc] initWithString:countSubString];

答案 1 :(得分:3)

[sTemp rangeOfString:@"count="]是一项潜在的昂贵操作,你要做两次。您应该将结果缓存在局部变量中。由于您希望在找到的范围之后立即启动子字符串,因此可以使用NSMaxRange()方便地获取该值。同样,对-copy使用-initWithString:而不是NSString,因为它可以通过几乎相同的语义为您提供更好的性能。所以:

NSRange range = [sTemp rangeOfString:@"count="];
NSString *count = [[sTemp substringFromIndex:NSMaxRange(range)] copy];

答案 2 :(得分:2)

我会做类似的事情:

NSString *count = [[NSString alloc] initWithString: 
    [sTemp substringFromIndex:
         [sTemp rangeOfString:@"count="].location 
       + [sTemp rangeOfString:@"count="].length]];