我正在我的View Controller中编写如下方法:
- (IBAction)expressionEvaluation:(UIButton *)sender {
NSDictionary *testValues = [NSDictionary dictionaryWithObjectsAndKeys:@"x", 2, @"y", 3, @"z", 4, nil];
//the below line gives the error
double result = [self.brain evaluateExpression:self.brain.expression usingVariableValues:testValues];
NSString *resultString = [NSString stringWithFormat:@"%g", result];
self.display.text = resultString;
}
在我的“大脑”课程中,我已经宣布了尚未完成的方法:
#import <Foundation/Foundation.h>
@interface CalculatorBrain : NSObject
- (void) pushOperand:(double)operand;
- (void) setVariableAsOperand:(NSString *)variableName;
- (void) performWaitingOperation;
- (double) performOperation:(NSString *)operation;
@property (readonly) id expression;
+ (double)evaluateExpression: (id)anExpression
usingVariableValues: (NSDictionary *)variables; //declared here
@end
...在.h和.m:
中+ (double) evaluateExpression:(id)anExpression usingVariableValues:(NSDictionary *)variables {
double result = 0;
int count = [anExpression count];
for (int i = 0; i < count; i++) {
}
return result;
}
为什么我得到这个“没有可见的@interface为'CalculatorBrain'声明选择器'evaluateExpression:usingVariableValues'”错误?我是Objective-c的新手,但我想这意味着它没有看到我的声明。我不确定这是否是语法/格式问题,因为我是该语言的新手。
答案 0 :(得分:4)
请注意,您将evaluateExpression:usingVariableValues:
声明为类方法
+ (double)evaluateExpression: (id)anExpression // + means class method
usingVariableValues: (NSDictionary *)variables; //declared here
并像实例方法
一样使用它// assuming self.brain is an instance of CalculatorBrain
[self.brain evaluateExpression:self.brain.expression usingVariableValues:testValues];
所以要么将方法改为
- (double)evaluateExpression: (id)anExpression // - means instance method
usingVariableValues: (NSDictionary *)variables; //declared here
或称之为
[CalculatorBrain evaluateExpression:self.brain.expression usingVariableValues:testValues];
答案 1 :(得分:3)
“+”符号表示类方法。您可以通过类名访问它,而不是它的实例。
喜欢
[MyClass methodName];
“ - ”符号表示实例方法。您可以通过类的实例访问它(在分配之后。
像
MyClass *myInstance = [[MyClass alloc] init];
[myInstance methodName];
答案 2 :(得分:2)
MOXY是对的。
+ (double)evaluateExpression: (id)anExpression;
是一个类方法,并被发送到类。您通常使用类方法来构建新对象:
+ (NSString*) stringWithString: (NSString*) s;
你想要的是一个实例方法:
- (double) evaluateExpression: (id) anExpression;
您将发送到对象上的实例。