2011-05-16 61 views
2

我有一個簡單的問題。我如何縮短很長的一行。我們使用傳統的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]]; 

這是不是最好的樣本,但這個想法是:

  1. 好了,第一行是分配和分配的東西。
  2. 第2行縮進更合適的空間。但是,如果變量或類型的名稱非常大,我將會遇到上述情況。我做的事?

    NSStringWithVeryBigType *bigNameVariable = [NSStringWithVeryBigType alloc] 
            initWithString: [sTemp substringFromIndex: 
    
  3. 在第二行我創建了一個新的NSString。如果第3行和第4行(不好的情況,不是這個)是主要功能創建,或者是新創建的,我可能會感到困惑。對此有一個好的規則?如果它也有一個很大的名字,該怎麼辦...

換句話說,在一個大的任務中,我有什麼規則要休耕?

+0

除非你知道你在做什麼,否則你不應該繼承'NSString'。鑑於這個問題的性質,我會猜測你沒有。沒有冒犯,但核心類型的分類是一個壞主意。 – 2011-05-16 21:14:56

+0

@Dave:你說得對,但我認爲這個問題的一部分更一般;給定一個長名稱的任何子類(使用'NSStringWithVeryBigName'作爲例子),該怎麼辦? – 2011-05-16 21:34:06

+0

@Josh一般來說,我只是讓Xcode爲我處理縮進。如果Xcode 4的文本太長,它會對文本進行換行,或者您可以通過插入換行符來自行分隔文本; Xcode會將行的其餘部分縮進到它認爲合適的位置。 – 2011-05-16 21:42:56

回答

2

我會做這樣的事情:

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

不要試圖給它的所有擠入一行。只要你有怪異的嵌套調用,這樣,使一個或多箇中間變量可讀性:

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

3

[sTemp rangeOfString:@"count="]是一個潛在的昂貴的操作,和你這樣做兩次。您應該將結果緩存在局部變量中。由於您想在找到的範圍之後立即啓動您的子字符串,因此您可以使用NSMaxRange()來方便地獲取該值。同樣,使用-copy而不是-initWithString:代替NSString,因爲它可以爲您帶來幾乎相同語義的更好性能。所以:

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