2012-03-02 6 views
0

+add_functionfirst_numbersecond_number을 어떻게 전달합니까? 현재 수학 계산을 취소하고 있습니다.클래스 메서드 구문에 대해 혼동을 들었습니다.

또한 파운드는 math_class-addButtonClicked:IBAction에 포함 시켰습니다.

또한 IBAction에 두 숫자를 추가 할 수 있지만 학습 목적으로는 math_class에 전달하고 싶습니다.

-(IBAction)addButtonClicked  
{ 
    double total; 
    double first_number = [firstNumberField.text doubleValue]; 
    double second_number = [secondNumberField.text doubleValue]; 

    total = [math_class.add_function number_one:first_number number_two:second_number]; 
    answerField.text = [NSString stringWithFormat:@"%.2f", total]; 

    [answerField setHidden:NO]; 
} 

@interface math_class : NSObject 

+ (double) add_function: (double) number_one: (double) number_two; 

@end 

@implementation math_class 

+(double) add_function: (double) number_one: (double) number_two 
{ 
    double total; 
    total = number_one + number_two; 
    return total; 
} 

@end 
+1

'math_class'에'add_function' 속성이 있습니까? 그 코드 행은 이해하기가 어렵습니다. –

+0

더 많은 코드가 필요합니다. 'add_function'에 대한 메소드 서명은 무엇입니까? 또한,'math_class'는 무엇입니까? – gregheo

+0

추가 코드가 추가되었습니다. – ConfusedDeer

답변

1

게시 한 코드에 몇 가지 문제가 있습니다. MathClass, 하지math_class을 : 모든

첫째, 코코아 터치의 규칙은 클래스의 이름은 낙타 케이스를 사용하고 대문자로 시작합니다. 메소드 이름은 camel-case를 사용하고 각 키워드는 소문자로 시작합니다. 명명 규칙을 따르는 경우 다른 사람들이 코드를 더 쉽게 이해할 수 있으므로 문제가 발생할 때 도움을 얻는 것이 더 쉬울 것입니다.

지금, 당신의 math_class 클래스에서,이 같은 방법을 선언 한 :

+ (double) add_function: (double) number_one: (double) number_two; 

을하지만 당신은 비정상적인 방법으로 공간에 넣어 공간을 남겨 두었다. 일반적인 방법은 정확히 같은 방법으로 이름을 유지, 그것을 쓰고, 다음과 같습니다

+ (double)add_function:(double)number_one :(double)number_two; 

이 방법의 이름은 add_function::입니다 하지add_function number_one:number_two: (당신이 그것을 호출하려고하는 데 사용 무엇이다).

이 메소드 이름에는 두 개의 키워드가 있습니다. 첫 번째 키워드는 add_function:이며, 이라는 double 인수가 사용됩니다.두 번째 키워드는 :이며 number_two이라는 double 인수를 사용합니다.

당신 호출이 같은이 방법 :

total = [math_class add_function:first_number :second_number]; 

그러나, 단지 :의 키워드를 메소드 이름을 사용하는 것은 거의 항상 아주 나쁜 스타일.

클래스를 좋은 스타일로 작성하는 데는 여러 가지 방법이 있습니다. 부작용

@interface MathClass : NSObject 

+ (double)sumWithNumber:(double)firstNumber number:(double)secondNumber; 

@end 

@implementation MathClass 

+ (double)sumWithNumber:(double)firstNumber number:(double)secondNumber { 
    return firstNumber + secondNumber; 
} 

@end 
메소드가 반환 값에 주로 사용되는

, 그리고, 우리는 그것을 반환하는 것은 후 이름 : 여기 하나의 방법입니다. 그래서 sum을 반환하기 때문에 sumWithNumber:number:이라고했습니다.

메소드 이름에는 두 개의 키워드가 있습니다. 첫 번째 키워드는 sumWithNumber:이고 double 인수는 firstNumber입니다. 두 번째 키워드는 number:이고 이라는 double 인수를 사용합니다. 다음과 같이 부를 수 있습니다 :

total = [MathClass sumWithNumber:first_number number:second_number]; 
-1

objective-c dot 속성 구문을 사용하여 함수에 액세스하려는 것 같습니다. 로 add_function이 정의 된 경우 :

+(void) add_function: ... 

.. 및 math_class 클래스 이름은 당신이

[match_class add_function number_one:....... 

참고 공간이 아닌 점을 사용해야합니다.

편집 지금 당신은 코드를 게시 한 다음 add_function에 대한

귀하의 정의가 잘못되었습니다 - OBJ-C에서 당신이 매개 변수의 이름 및 대부분의 다른 언어와는 달리 변수의 이름을 지정해야합니다.

+(double) add_function_number_one: (double) number_one number_two: (double) number_two 

이 함수의 이름이 지금 add_function_number_one라고 그래서 왜 첫 번째 매개 변수의 이름이 포함 된 코코아의 규칙이있다 :

는 다음과 같은 add_function 서명이 볼 수있는 것입니다.

+0

더 많은 코드로 업데이트되었습니다. – ConfusedDeer

+0

'first_number'이전에 'expected'을 (를) 얻었습니다. – ConfusedDeer

-1

아마도 [math_class add_function:first_number:second_number];이라고해야합니다. 클래스의 이름은 수학이 아니라 math_class입니다.

+0

제공하고 현재 오류가 발생했습니다 : 'first_number'앞에 'expected' '가 있습니다. – ConfusedDeer

+0

당신을 도우려는 사람들이 -1' 당신이 질문을 업데이트하기 전에 게시했을 때. –

+0

벤 당신의 도움에 감사 드리며 "-1"하지 않았습니다. 나는 당신에게 도움이되는 질문에 대해 YES를 대답했습니다. 당신이나 다른 사람이 어떻게 -1로 끝났는지 모르겠다. 다시 ... 도와 줘서 고마워. 또한 방금 투표 한 결과 평판 포인트가 125 점이 필요하다고 지적했습니다. 나는 1을 가지고 있으므로, 그 문제에 대해 투표를 할 수는 없다. – ConfusedDeer

관련 문제