如何从另一个类访问变量?

9

这可能有一个非常简单的解决方案,但我无法让它起作用。

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


我在我的Cocoa文件中有多个类。通常的方法是为每个类创建一对文件(MyClass.h,MyClass.m)。您可以通过右键单击项目中的组并单击添加文件来执行此操作。您将创建.m文件,.h文件将免费附带。 - Peter Hosey
1
直接访问实例变量是一个非常糟糕的想法。使用属性,并且合成访问器或编写自己的访问器。直接访问变量会破坏Mac OS X上的KVO和绑定等功能,而且这不是一个好的OO编程实践。 - Alex
4个回答

15

你可以将变量声明为public,或将其转换为属性。例如,要将其声明为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];

2
属性方法更好,以我个人的看法。 - Abizern

5
你可以将class2中的变量公开为属性。如果class1引用了class2,那么class1就能看到这个变量。不过,老实说,你似乎是Objective-C和面向对象编程的初学者。我建议你更多地了解两者。
这里有一个关于Objective-C面向对象编程的起点

4
"stackoverflow.com"只面向高级用户吗?如何定义谁是初学者,谁不是。那个人没有提出学习Objective-C的问题。 - Darius Miliauskas
3
真诚地同意 @DariusMiliauskas 的观点 :P - Preetam Jadakar
Stackoverflow是为每个人而存在的,我相信这个问题很有意义,它可以帮助那些可能正在寻找答案的人! - AD Progress

3
尝试创建一个文件来保存需要在整个应用程序中访问的变量。
extern NSString *stringVariable;

@interface GlobalVariables

@property (retain, nonatomic) NSString *stringVariable;    

@end

并且在GlobalVariables.m文件中添加

#import "GlobalVariables.h"

@implements GlobalVariables

@synthesize stringVariable;

NSString *stringVariable;

@end

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

编辑

我之前提供的答案不是我现在做这件事情的方式。更好的方式应该是:

@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"];
// .....

[[MyClass alloc] init] 将会返回一个新的实例! - Hecot

0
在“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

谢谢!:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接