2011-05-16 2 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. 두 번째 줄은 들여 쓰고 오른쪽 줄이 떨어졌습니다. 그러나 변수 또는 유형의 이름이 매우 큰 경우 위의 상황이 발생합니다. 내가 뭘?

    NSStringWithVeryBigType *bigNameVariable = [NSStringWithVeryBigType alloc] 
            initWithString: [sTemp substringFromIndex: 
    
  3. 두 번째 줄에 새 NSString을 만듭니다. 3 번과 4 번 라인 (이 경우가 아니라 나쁜 상황)이 주요 함수 생성이거나이 새로운 것이면 혼란 스러울 수 있습니다. 그것에 대해 좋은 규칙이 있습니까? 그리고 그것이 큰 이름도 가지고 있다면, 다시 할 일 ...

다른 말로하면, 큰 할당 선에서 내가 휴약해야 할 규칙은 무엇입니까?

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

무엇을하고 있는지 알지 못한다면 NSString을 서브 클래스하지 말아야합니다. 이 질문의 성격을 감안할 때, 나는 당신이하지 않는다고 추측 할 것입니다. 불쾌감은 없지만 핵심 유형을 서브 클래 싱하는 것은 나쁜 생각입니다. –

+0

@Dave : 네 말이 맞아.하지만 그 질문의 일부는 더 일반적이라고 생각해. 어떤 하위 클래스 (NSStringWithVeryBigName'을 예제로 사용)가 긴 이름으로 주어진다면, 무엇을해야할까요? –

+0

@Josh 일반적으로, 나는 Xcode가 나를 위해 들여 쓰기를 처리하도록했다. Xcode 4는 텍스트가 너무 길거나 줄 바꿈을 삽입하여 줄 바꿈을 할 수 있습니다. Xcode는 라인의 나머지 부분을 적절한 위치라고 생각하는 곳에 들여 쓰기합니다. –

답변

2

내가 좋아하는 일을 할 것입니다.

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

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

하는 한 줄에 모두 집어 넣은하지 마십시오 :

+0

콧노래, 괜찮아. 어쩌면 "한 줄에 모두 코드를 넣는"문제가 있습니다. 더 많은 것을 시도 할 것입니다. – Rodrigo

3

[sTemp rangeOfString:@"count="]가 잠재적으로 비용이 많이 드는 작업이다, 당신은 두 번 일을하는지 :이 같은 이상한 중첩 통화를 할 때마다, 가독성을 위해 하나 개 이상의 중간 변수를 확인하십시오. 결과를 로컬 변수에 캐시해야합니다. 찾은 범위 바로 뒤에 하위 문자열을 시작하려는 경우 NSMaxRange()을 사용하면 편리하게 그 값을 가져올 수 있습니다. 마찬가지로, NSString-initWithString: 대신 -copy을 사용하십시오. 거의 동일한 의미론으로 더 나은 성능을 제공 할 수 있습니다. 그래서 :

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