2014-01-18 176 views
2

我在我的項目中有這些巨大的重複塊代碼,我試圖縮小它們。拿這塊例如:使用字符串作爲名稱來設置屬性值

self.Day11.delegate = (id)self; 
self.Day12.delegate = (id)self; 
self.Day13.delegate = (id)self; 
self.Day14.delegate = (id)self; 
self.Day15.delegate = (id)self; 
self.Day16.delegate = (id)self; 
self.Day17.delegate = (id)self; 
self.Day18.delegate = (id)self; 
self.Day19.delegate = (id)self; 

我想要做的就是讓我可以用一個for循環或類似的東西萎縮下來是這樣的:

for (int i = 1 ; i<=9; i++) { 
    NSString *var = [NSString stringWithFormat:@"Day1%d",i]; 

    self.var.delegate = (id)self; 

} 

我知道這沒有按」工作是否有可能的方式來做這樣的事情?

+1

這聽起來像你需要一個數組。而且,那些投給'(id)'的投票是多餘的,*可怕的。* – 2014-01-18 21:42:58

回答

5

不,不,不。

@property (nonatomic,strong) NSArray *arrayOfDays; 

現在擺脫所有這些天的對象和填充self.arrayOfDays與任何所有的單獨日的對象是...

則...

for(int i=0; i<[self.arrayOfDays count]; ++i) { 
    [[self.arrayOfDays objectAtIndex:i] setDelegate: self]; 
} 

甚至更​​好,如果所有這些對象都屬於同一類型(我假設它們的類型爲Day),我們可以這樣做:

for(Day *day in self.arrayOfDays) { 
    day.delegate = self; 
} 

Best(per Daij-Dan's comment):

[self.arrayOfDays setValue:self forKeyPath:@"delegate"]; 
+0

謝謝,這正是我所期待的!對不起,我是新的Objective-C的錯誤代碼。 – user1953754

+0

等待,使用第二種方法,我從不兼容的類型* const__strong''分配給'id uitextfielddelegate'的黃色標記# – user1953754

+0

固定無所謂 – user1953754

相關問題