对类方法语法感到困惑

时间:2012-03-02 16:40:13

标签: objective-c cocoa-touch math addition

如何将first_numbersecond_number传递给+add_function? 我目前正在获得数学未申报。

此外,我已将英镑包含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

3 个答案:

答案 0 :(得分:1)

您发布的代码存在一些问题。

首先,Cocoa Touch中的约定是类名称使用驼峰大小写并以大写字母开头: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的{​​{1}}参数。第二个关键字仅为number_one,并采用名为:的{​​{1}}参数。

可以这样调用这个方法:

double

但是,使用关键字仅为number_two的方法名称几乎总是很糟糕。

有很多方法可以用好的方式写你的课程。这是一种方式:

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 ,并采用名为sumWithNumber:number:的{​​{1}}参数。第二个关键字为sumWithNumber:,并采用名为double的{​​{1}}参数。你可以这样称呼它:

firstNumber

答案 1 :(得分:-1)

看起来您正在尝试使用objective-c dot属性语法来访问函数。如果add_function定义为:

+(void) add_function: ...

..和math_class是你应该使用的类名

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

注意空格而不是点。

现在编辑您已发布代码:

你对add_function的定义是错误的 - 在obj-c中你需要给出参数的名称和变量的名称,这与大多数其他语言不同。

以下是add_function签名的样子:

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

在cocoa中有一个约定,函数的名称包含第一个参数的名称,因此它现在称为add_function_number_one。

答案 2 :(得分:-1)

你可能应该调用[math_class add_function:first_number:second_number];你的类被称为math_class,而不是数学。