Запутался в синтаксисе метода класса - PullRequest
0 голосов
/ 02 марта 2012

Как мне передать first_number и second_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 ]

1 голос
/ 03 марта 2012

Есть несколько проблем с кодом, который вы разместили.

Прежде всего, соглашение в Cocoa Touch гласит, что имена классов используют верблюжий регистр и начинаются с заглавной буквы: MathClass, , а не math_class. Имена методов используют верблюжий регистр, и каждое ключевое слово начинается со строчной буквы. Если вы будете придерживаться соглашения об именах, другим людям будет легче понять ваш код, поэтому вам будет легче получить помощь, когда у вас возникнут проблемы.

Теперь в вашем 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_one. Второе ключевое слово просто : и принимает аргумент 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:, потому что он возвращает сумму.

Имя метода имеет два ключевых слова. Первое ключевое слово sumWithNumber: и принимает double аргумент с именем firstNumber. Второе ключевое слово - number: и принимает double аргумент с именем secondNumber. Вы можете назвать это так:

total = [MathClass sumWithNumber:first_number number:second_number];
0 голосов
/ 02 марта 2012

Вы, вероятно, должны звонить [math_class add_function:first_number:second_number]; Ваш класс называется math_class, а не математика.

0 голосов
/ 02 марта 2012

Похоже, вы пытаетесь получить доступ к функции, используя синтаксис свойства точки target-c. Если 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

В какао существует соглашение, согласно которому имя функции включает в себя имя первого параметра, поэтому теперь она называется add_function_number_one.

...