这个Objective-C代码如何缩进?
问题描述:
我有一个简单的问题。我如何缩短很长的一行。我们使用传统的80个字符。 这是我的代码行:这个Objective-C代码如何缩进?
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]];
这是不是最好的样本,但这个想法是:
- 好了,第一行是分配和分配的东西。
-
第2行缩进更合适的空间。但是,如果变量或类型的名称非常大,我将会遇到上述情况。我做的事?
NSStringWithVeryBigType *bigNameVariable = [NSStringWithVeryBigType alloc] initWithString: [sTemp substringFromIndex:
- 在第二行我创建了一个新的NSString。如果第3行和第4行(不好的情况,不是这个)是主要功能创建,或者是新创建的,我可能会感到困惑。对此有一个好的规则?如果它也有一个很大的名字,该怎么办...
换句话说,在一个大的任务中,我有什么规则要休耕?
答
我会做这样的事情:
NSString *count = [[NSString alloc] initWithString:
[sTemp substringFromIndex:
[sTemp rangeOfString:@"count="].location
+ [sTemp rangeOfString:@"count="].length]];
答
不要试图给它的所有挤入一行。只要你有怪异的嵌套调用,这样,使一个或多个中间变量可读性:
NSRange rng = [sTemp rangeOfString:@"count="];
NSUInteger indexAfterCount = rng.location + rng.length;
NSString * countSubString = [sTemp substringFromIndex:indexAfterCount];
NSStringSubclassWithReallyLongName * countString;
countString = [[NSStringSubclassWithReallyLongName alloc] initWithString:countSubString];
+0
哼,好的,可以是个好主意。也许我有问题把“全在一行代码”,我会尝试更多这一点。 – Rodrigo 2011-05-17 00:31:47
答
[sTemp rangeOfString:@"count="]
是一个潜在的昂贵的操作,和你这样做两次。您应该将结果缓存在局部变量中。由于您想在找到的范围之后立即启动您的子字符串,因此您可以使用NSMaxRange()
来方便地获取该值。同样,使用-copy
而不是-initWithString:
代替NSString
,因为它可以为您带来几乎相同语义的更好性能。所以:
NSRange range = [sTemp rangeOfString:@"count="];
NSString *count = [[sTemp substringFromIndex:NSMaxRange(range)] copy];
除非你知道你在做什么,否则你不应该继承'NSString'。鉴于这个问题的性质,我会猜测你没有。没有冒犯,但核心类型的分类是一个坏主意。 – 2011-05-16 21:14:56
@Dave:你说得对,但我认为这个问题的一部分更一般;给定一个长名称的任何子类(使用'NSStringWithVeryBigName'作为例子),该怎么办? – 2011-05-16 21:34:06
@Josh一般来说,我只是让Xcode为我处理缩进。如果Xcode 4的文本太长,它会对文本进行换行,或者您可以通过插入换行符来自行分隔文本; Xcode会将行的其余部分缩进到它认为合适的位置。 – 2011-05-16 21:42:56