我有一个简单的问题。我如何缩进很长的一行。让我们使用传统的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]];
这不是最好的样本,但想法是:
第2行缩进,右侧空间更大。但是,如果变量或类型的名称非常大,我将具有上述情况。我做了什么?
NSStringWithVeryBigType *bigNameVariable = [NSStringWithVeryBigType alloc]
initWithString: [sTemp substringFromIndex:
换句话说,在一个大的任务线上,我必须休息什么规则?
答案 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]];