如何从其他类访问变量?

时间:2009-03-18 15:14:28

标签: objective-c cocoa class import

对此可能有一个非常简单的解决方案,但我无法使其正常工作。

我的Cocoa文件中有多个类。在其中一个类class1中,我创建了一个我需要在另一个类class2中使用的变量。有没有一种简单的方法可以在class2中导入此变量?

4 个答案:

答案 0 :(得分:14)

您可以将变量设为public,也可以将其变为属性。例如,将其公开:

@interface Class1
{
@public
    int var;
}
// methods...
@end

// Inside a Class2 method:
Class1 *obj = ...;
obj->var = 3;

使它成为一个属性:

@interface Class1
{
    int var;  // @protected by default
}
@property (readwrite, nonatomic) int var;
// methods...
@end

@implementation Class1
@synthesize var;
...
@end

// Inside a Class2 method:
Class1 *obj = ...;
obj.var = 3;  // implicitly calls [obj setVar:3]
int x = obj.var;  // implicitly calls x = [obj var];

答案 1 :(得分:5)

您可以将class2中的变量公开为属性。如果class1具有对class2的引用,则class1可以看到该变量。但老实说,这听起来像是Objective-C和面向对象编程的初学者。我建议你阅读更多内容。

Here is a place开始使用Objective-C进行面向对象编程。

答案 2 :(得分:3)

尝试制作一个文件,其中包含需要在整个应用中访问的变量。

extern NSString *stringVariable;

@interface GlobalVariables

@property (retain, nonatomic) NSString *stringVariable;    

@end

并在GlobalVariables.m文件中添加

#import "GlobalVariables.h"

@implements GlobalVariables

@synthesize stringVariable;

NSString *stringVariable;

@end

然后只要您将GlobalVariables.h导入到您需要访问该变量的任何.m文件中,您就可以在整个程序中的任何位置分配和访问。

编辑

我上面给出的答案与现在的方式不同。 这更像是

@interface MyClass

@property (nonatomic, strong) NSString *myVariable;

@end

然后在.m文件中

@implementation MyClass

@sythesize = myVariable = _myVariable; // Not that we need to do this anymore

@end

然后在某个方法的另一个课程中我会有

// .....
MyClass *myClass = [[MyClass alloc] init];
[myClass setMyVariable:@"My String to go in my variable"];
// .....

答案 3 :(得分:1)

在“XCode”中,您需要进行导入,通过将其声明为属性来创建对象,然后使用“object.variable”语法。文件“Class2.m”将以下列方式显示:

#import Class2.h
#import Class1.h;

@interface Class2 ()
...
@property (nonatomic, strong) Class1 *class1;
...
@end

@implementation Class2

//accessing the variable from balloon.h
...class1.variableFromClass1...;

...
@end

谢谢! : - )