2016-08-08 4 views
1

Предположим, у меня есть класс игрока, который содержит переменные a, b, c и d.Доступ к переменной класса вместо значения

В зависимости от определенных обстоятельств, одна из этих переменных будет передана функции, например. [self calculateSomethingWithVariable: player.c];

Что у меня возникают проблемы, делая пытается выяснить, как сделать что-то вроде этого:

- (void)calculateSomethingWithVariable:(Type *)Value { 
     Value = something; 
} 

где Value должен быть player.a или player.b вместо фактического значения от a или b, если это имеет смысл.

ответ

1

Во-первых - не используйте имена верхних регистров для переменных. Это затрудняет определение переменной и тип.

Во-вторых, вы можете изменить свой код, чтобы что-то вроде этого:

- (void)calculateSomethingWithVariable:(Type **)variableRef { 
    *variableRef = something; 
} 

В основном вы передаете указатель на переменные, а не прямой ссылки. Так что при вызове этого вы (предполагая свой стихарь, и Г являются свойства класса игрока:

Type *localC = player.c: 
[self calculateSomethingWithVariable: &localC]; 
Player.c = localC; 

Это своего рода подходом, принятым в некоторых API, Apple, где переменная будет набор должен быть принят а не его значение. В вашем случае (предполагая, что код в основном прост, как ваш пример) было бы гораздо проще просто вернуть новое значение:

- (Type *)calculateSomethingWithVariable:(Type *)oldValue { 
    // Do something with old value. 
    return somethingBasedOnOldValue; 
} 
Player.c = [self calculateSomethingWithVariable: player.c];