NSString *selStr = NSStringFromSelector(@selector(setDataSource:));
SEL selector = NSSelectorFromString(selStr);
SEL newSelector = NSSelectorFromString([NSString stringWithFormat:@"dwu_uicollectionview_%@", selStr]);
這類的寫法, 把同樣的 SEL 轉 NSString 然後又轉回 SEL, 我們應該可以寫成
SEL selector = @selector(setDataSource:);
NSString *selStr = NSStringFromSelector(selector);
SEL newSelector = NSSelectorFromString([NSString stringWithFormat:@"dwu_uitableview_%@", selStr]);
減少一次轉換.
第二個是, 原先的 code 裡面
SEL cellForItemSel = NSSelectorFromString(cellForItemSelStr);
SEL newCellForItemSel = NSSelectorFromString([NSString stringWithFormat:@"dwu_%@", selStr]);
在這邊 newCellForItemSel 應該是由 cellForItemSel 這個 SEL 的延續, 而不是 selStr 的, 這邊的 selStr 指的是更外面的 setDataSource:, 我猜測, 這邊我們想要替換的 SEL 應該是 collectionView:cellForItemAtIndexPath:, 所以把程式碼替換成下面的樣子
SEL cellForItemSel = @selector(collectionView:cellForItemAtIndexPath:);
NSString *cellForItemSelStr = NSStringFromSelector(cellForItemSel);
SEL newCellForItemSel = NSSelectorFromString([NSString stringWithFormat:@"dwu_%@", cellForItemSelStr]);
Hello @diwu,
這次修改的部分主要的目的, 是想把
generateTimeLabelForUITableViewCell
與generateTimeLabelForUICollectionViewCell
類似的部分, 抽出來做為另外一個function
.過程中, 有發現一些點, 感覺上怪怪的, 所以一併做了一些修改, 第一個是
這類的寫法, 把同樣的
SEL
轉NSString
然後又轉回SEL
, 我們應該可以寫成減少一次轉換.
第二個是, 原先的 code 裡面
在這邊
newCellForItemSel
應該是由cellForItemSel
這個SEL
的延續, 而不是selStr
的, 這邊的selStr
指的是更外面的setDataSource:
, 我猜測, 這邊我們想要替換的SEL
應該是collectionView:cellForItemAtIndexPath:
, 所以把程式碼替換成下面的樣子大致上是這個樣子, 可以互相討論, 謝謝. :)