Как я могу получить доступ к переменным из другого класса? - PullRequest
9 голосов
/ 18 марта 2009

Вероятно, есть очень простое решение для этого, но я не могу заставить его работать.

В моем файле Какао есть несколько классов. В одном из классов class1 я создаю переменную, которую мне нужно использовать и в другом классе class2. Есть ли простой способ импортировать эту переменную в class2?

Ответы [ 4 ]

14 голосов
/ 18 марта 2009

Вы можете сделать переменную общедоступной или превратить ее в свойство. Например, чтобы сделать его публичным:

@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];
5 голосов
/ 18 марта 2009

Вы можете выставить переменную в class2 как свойство. Если class1 имеет ссылку на class2, class1 может увидеть переменную. Честно говоря, звучит так, будто вы новичок в Objective-C и объектно-ориентированном программировании. Я рекомендую вам прочитать больше об обоих.

Вот место для начала объектно-ориентированного программирования с Objective-C.

3 голосов
/ 16 января 2012

попробуйте создать файл, содержащий ваши переменные, к которым нужно обращаться по всему приложению.

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"];
// .....
1 голос
/ 12 ноября 2014

В «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

Спасибо! : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...