2015-06-13 5 views
0

Say есть класс, который содержит два различных свойства, такие как:Objective-C: условно назвать различные свойства

@interface MyClass : NSObject 

@property id valueWhenNO; 
@property id valueWhenYES; 

@end 

При использовании этого класса с логическим значением называется «состояние», я знаю, что могу получить имущество по в ИТС государстве »путем:

MyClass *myClass; 
id value = state ? myClass.valueWhenYES : myClass.valueWhenNO; 

Но я обнаружил, что, используя много условного оператора в сложном коде может сделать читаемость его очень трудно. Поскольку я не намерен предоставлять информацию «Состояние» в «MyClass», в «MyClass» не может быть дополнительного логического свойства.

Есть ли какой-либо способ в классе Objective-C, который можно использовать для условного получения свойства с короткой строкой кода, например, следующим образом?

id value = myClass.valueByState; 
+0

Вы можете сделать методы свойств, чем вводить свои условные выражения в реализации. – kezi

ответ

2

Имейте 2 экземпляра класса с 1 свойством вместо 1 экземпляра с 2 свойствами. Затем, когда состояние изменяется, вы переключаете экземпляр вместо того, чтобы иметь код во всем мире, чтобы проверить состояние.

+1

Было бы здорово добавить, что это можно легко достичь с помощью id или подкласса с базовым классом для набора объектов с тем же интерфейсом. – Andy

+0

@ Andy Я думал проще, просто имея один класс, который вы создавали с разными значениями, но протоколы - прекрасный подход – Wain

0

Вы можете поместить логику переключения в только для чтения собственности ..

- (идентификатор) appropriateObject {возвращение ((состояние) self.valueWhenYes: self.valueWhenNo); }