我在寫一些使用溫度的代碼。所以我想要一個能夠保持規模被使用的類(C/F)和價值。我使類不可變(通過在實現類中使用類別)。我想要一個轉換器。在Java中,我們通常會執行一個靜態方法並讓它返回一個新實例,但是您不能在O-C中執行此操作,因爲+方法是類方法,並且無法訪問實例屬性。在目標C中使用init作爲複製轉換器?
所以我做了一個init方法,它將當前的溫度實例和我們想要轉換的比例。長時間完成C++後,這就像一個拷貝構造函數。
這裏的問題是,是否有更好的方法或什麼將被視爲標準做法。因此,要獲得一個轉換,你會怎麼做:
Temperature *freezingF = [[Temperature alloc]initWithScale:Fahrenheit andValue:@32.0];
Temperature *freezingC = [[Temperature alloc]initWith:freezingF andScale:Celsius];
assertThat(freezingC.value, is(@0));
(縮短變量名限制滾動...)
類方法可以訪問相同類的實例的私有ivars。你使用' - >'語法。 'someInstance - > _ someIvar'。 – rmaddy 2013-03-18 04:03:04
在這裏有一個答案,說+方法不能,因爲他們是類方法..什麼NSNumber的例子,它有所有numberWith____方法,這基本上是類工廠。 – Rob 2013-03-18 04:44:06
所有'numberWithXXX'方法都是相應的'alloc/initWithXXX'方法的方便包裝。我不會稱他們爲工廠方法。 – rmaddy 2013-03-18 04:48:40