2015-06-13 58 views
0

假設有一個包含兩個不同的特性,如類:的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

可以很好地補充一點,可以通過編號輕鬆實現,或者使用具有相同接口的一組對象的基類進行子類化。 – Andy

+0

@Andy我只想讓一個類用不同的值實例化,但我認爲它更簡單,但協議也是一個很好的方法 – Wain

0

你可以把開關邏輯在只讀屬性..

- (ID)appropriateObject {回報((州)self.valueWhenYes:self.valueWhenNo); }