2011-08-27 5 views
1

저는 Objective-C를 처음 사용합니다. 두 값을 반환하는 함수를 작성했습니다. 이제는 두 개의 라벨로 인쇄하고 싶습니다. 어떻게 할 수 있습니까?Objective-C를 사용하여 동일한 함수의 두 반환 값을 두 개의 레이블에 표시하는 방법은 무엇입니까?

-(NSString *)abc:(NSInteger)weeks year:(NSInteger)year{ 

............ 

return ca , da ; 

} 

나는

resultLabel1.text = [self abc year:year]; //output show the value of da 

지금은 resultLabel2.text

에 resultLabel1.text에 캘리포니아의 가치와 다

것이 가능 보여주고 싶은

같은이 함수를 호출 할 때?

+0

왜 사람들이 다운 그레이드합니까? –

답변

0

두 값으로 NSArray 또는 NSDictionary를 반환해야합니다.

5

단일 값은 C 및 C- 파생 언어의 모든 방법으로 만 반환 할 수 있습니다. 따라서 두 값을 나타내는 단일 값을 리턴하면됩니다. NSDictionary을 사용하여이를 달성 할 수 있습니다.

-(NSDictionary *)abc:(NSInteger)weeks year:(NSInteger)year{ 

    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
      ca, @"object1", 
      da, @"object2", nil]; 

    return dict; 

} 

또 다른 방법은 NSArray 반환하는 것입니다 :

그래서 그것을 만들

- (NSArray *)abc:(NSInteger)weeks year:(NSInteger)year { 

    NSArray *myArray = [NSArray arrayWithObjects:da, ca, nil]; 
    return myArray; 
} 

을 그리고 당신은 다음과 같이이 값을 사용할 수 있습니다

NSArray *myArray = [self abc:2 year:2004]; 
textLabel.text = (NSString *)[myArray objectAtIndex:0]; 
textLabel2.text = (NSString *)[myArray objectAtIndex:1]; 
+0

안녕하세요,하지만 그것의 쇼 경고 (NSString은 objectAtIndex, 목표 C에서 응답하지 않습니다) 모두 반환 값을 표시 문자열 그래서 내가 어떻게이 문제를 해결할 수 있습니다. – Ashish

+0

나는 당신이 당신의 방법의 반환 유형을 바꾸지 않았다고 생각합니다. 분명히 objectAtIndex에 응답하지 않는 NSString을 리턴하고 있다고 생각합니다. 돌아와 NSArray를 수신했는지 확인하십시오. 해당 객체 **는 ** objectAtIndex에 응답합니다. – Jules

2

는 줄스가 지적 하듯이 메서드는 단일 값만 "반환"할 수 있습니다. 그러나 여러 값을 반환하는 몇 가지 옵션이 있습니다.

  1. 개체에 여러 값이 들어있는 포인터를 반환합니다. 객체는 NSArray, NSDictionary이거나 자신의 클래스 일 수 있습니다. Jules answer에서 이에 대한 몇 가지 예를 들었습니다.

  2. 매개 변수에 여러 포인터를 전달하면이 메서드는 가리키는 개체 또는 변수에 결과를 저장할 수 있습니다. example here을 참조하십시오.

  3. 여러 필드가있는 구조체를 반환하십시오. example here이 있습니다.

2

메서드에서 값을 여러 개 반환하려면 NSDictionary를 사용합니다. 사전에서 각 값의 이름이 지정되고 키로 참조됩니다. 이 예제의 키는 "ca"및 "da"이고 값은 모두 짧은 텍스트 문자열입니다.

-(NSDictionary *) abc: (NSInteger) weeks year:(NSInteger) year { 

    NSString* ca = [NSString stringWithFormat:@"Week is %d", weeks]; 
    NSString* da = [NSString stringWithFormat:@"Year is %d", year]; 

    return [[NSDictionary alloc] initWithObjectsAndKeys:ca, @"ca", da, @"da", nil]; 
} 

호출 방법과 같은 코드로 반환 된 값을 골라 :

NSInteger weekParam = @"52".integerValue; 
    NSInteger yearParam = @"2011".integerValue; 

    NSDictionary *result = [self abc:weekParam year:yearParam]; 

    NSLog(@"ca has value: %@", [result objectForKey:@"ca"]); 
    NSLog(@"da has value: %@", [result objectForKey:@"da"]); 

다음과 같은 라인을 추가해야 로그 :

ca has value: Week is 52 
da has value: Year is 2011 
1

할 수 있습니다 "반환"복수를 블록의 매개 변수로 개체 :

- (void)method { 
    [self returnMultipleObjectsWithCompletion:^(NSString *firstString, NSString *secondString) { 
     NSLog(@"%@ %@", firstString, secondString); 
    }]; 
} 

- (void)returnMultipleObjectsWithCompletion:(void (^)(NSString *firstString, NSString *secondString))completion { 
    if (completion) { 
     completion(@"firstReturnString", @"secondReturnString"); 
    } 
} 
관련 문제