成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

序 相信做iOS開發的小伙伴們經常會遇到這樣的頁面: 對于這樣的靜態列表我們可以直接用 storyboard

移動開發 iOS
現在的 WAMDataSource 還沒辦法做到直接作為 tableView 的數據源,這是在今后的更新中會解決的問題。雖然 WAMSimpleDataSource 并沒有減少很多代碼量,但能提升靜態列表中代碼的可讀性以及可維護性,個人覺得還是值得的。

相信做iOS開發的小伙伴們經常會遇到這樣的頁面: 

 

 

 

對于這樣的靜態列表我們可以直接用 storyboard 拖一個出來,或者直接用代碼創建。我個人的話會選擇用代碼直接創建,但是之前一直有的問題是沒有較好的數據源表示方式,需要對 indexPath 進行硬編碼,這導致了在 tableView 的代理里面需要進行判斷: 

  1. if (indexPath.section == 0) { 
  2.     if (indexPath.row == 0) { // email 
  3.         // do something 
  4.     } else if (indexPath.row == 1) { // phone 
  5.         // do something 
  6.     } 
  7. else if (indexPath.section == 1) { 
  8.     // do something 
  9.  

稍微好點的會在相關的判斷邊上做注釋,但是這樣寫依然容易在往后(產品)調整順序時調整了一個地方而忘記另外的,總的來說就是代碼不夠優雅。基于這樣的背景,在嘗試了各種方式之后,產生了一個可行的解決方案 —— WAMSimpleDataSource。

設計思路

在定義 WAMCellInfo 和 WAMSectionInfo 兩個類時我選擇引入別名( alias )來解決 indexPath 的硬編碼問題(可能有人會說alias也是硬編碼,但這樣做提升了代碼的可讀性=0=)。

WAMCellInfo

WAMCellInfo 為 cell 的創建提供了最基本的信息,如 reuseIdentifier ,title,detail。用戶也能傳入自定義的 cell 而不必擔心循環引用的問題。

WAMSectionInfo

WAMSectionInfo 作為 WAMCellInfo 的容器,提供了添加,刪除,替換,以及基于 alias 對 WAMCellInfo 和 WAMCellInfo 的索引方法。

WAMDataSource

WAMDataSource 是所有 WAMSectionInfo 的容器,同樣提供了添加,刪除,替換,以及基于 alias 對 WAMSectionInfo 的索引方法。

Demo

讓我們就以一個簡單的 demo 看下 WAMSimpleDataSource 在靜態列表中如何能讓代碼看起來更簡潔。 

  1. static NSString *const kReuseIdentifier     = @"tableViewCellIdentifier"
  2. static NSString *const kIdentifierCellAlias = @"kIdentifierCellAlias"
  3. static NSString *const kSelfDefineCellAlias = @"kSelfDefineCellAlias"
  4.  
  5. static NSString *const kSectionZeroAlias = @"kSectionZeroAlias"
  6. static NSString *const kSectionOneAlias  = @"kSectionOneAlias"
  7.  
  8. #pragma mark - Initialization 
  9.  
  10. // section info初始化 
  11. WAMSectionInfo *zero = [WAMSectionInfo infoWithCellInfos:@[] alias:kSectionZeroAlias]; 
  12. // 添加操作,cell info初始化 
  13. [zero appendingCellInfo:[WAMCellInfo infoWithSelfDefineCell:self.customizedCell alias:kSelfDefineCellAlias]]; 
  14.  
  15. WAMSectionInfo *one = [WAMSectionInfo infoWithCellInfos:@[ 
  16.         [WAMCellInfo infoWithReuseIdentifier:kReuseIdentifier title:nil detail:nil alias:kIdentifierCellAlias] 
  17.     ] alias:@"oneSectionAlias"]; 
  18.  
  19. // data source初始化 
  20. self.dataSource = [WAMDataSource dataSourceWithSectionInfos:@[zero, one]]; 
  21.  
  22. #pragma mark - UITableViewDataSource 
  23.  
  24. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
  25.     return self.dataSource.sectionInfos.count
  26.  
  27. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
  28.     return self.dataSource.sectionInfos[section].cellInfos.count
  29.  
  30. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
  31.     WAMCellInfo *cellInfo = self.dataSource.sectionInfos[indexPath.section].cellInfos[indexPath.row]; 
  32.     __kindof UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellInfo.identifier forIndexPath:indexPath]; 
  33.  
  34.     // 根據不同的alias進行不同的操作 
  35.     if ([cellInfo.alias isEqualToString:kSelfDefineCellAlias]) { 
  36.         // do something 
  37.     } else if ([[cellInfo.alias isEqualToString:kIdentifierCellAlias]) { 
  38.         // do something 
  39.     } 
  40.     . 
  41.     . 
  42.     . 
  43.  
  44.     return cell; 
  45.  
  46. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
  47.     return self.dataSource.sectionInfos[section].sectionHeaderHeight; 
  48.  
  49. - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { 
  50.     return self.dataSource.sectionInfos[section].sectionFooterHeight; 
  51.  

總結與缺陷

現在的 WAMDataSource 還沒辦法做到直接作為 tableView 的數據源,這是在今后的更新中會解決的問題。雖然 WAMSimpleDataSource 并沒有減少很多代碼量,但能提升靜態列表中代碼的可讀性以及可維護性,個人覺得還是值得的。 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2019-02-14 13:30:54

內存泄露運維

2021-12-30 18:57:49

計算

2014-01-22 14:27:25

科技創業者人品

2013-12-19 10:20:19

2013-12-27 09:46:40

Windows 9Windows 9桌面

2013-08-09 10:37:31

代碼數據

2013-07-22 11:06:37

2015-06-15 10:50:58

iOS 9蘋果應用開發商

2023-03-27 00:06:12

2012-10-12 10:13:26

eclips代碼編寫Editplus

2014-11-26 10:47:46

虛擬現實蘋果

2012-10-11 09:46:20

2015-05-19 14:30:48

加密視頻加密億賽通

2021-06-16 09:10:29

APP開發AndroidiOS

2013-08-05 14:34:46

2021-09-09 06:55:44

Python瀏覽器程序

2014-06-06 13:49:01

程序員項目經理

2021-10-17 23:46:06

Go項目版本號

2018-10-16 10:29:40

C語言編程錯誤

2015-12-10 10:14:28

物聯網物聯網技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天爽天天干 | 久久久久久久av麻豆果冻 | 国产精品久久777777 | 91一区二区三区 | 久久久这里都是精品 | 国产中文字幕在线 | 国产精品久久久久婷婷二区次 | 国产精品欧美一区二区 | 亚洲精品日本 | 欧美日韩国产一区二区 | 国产一区二区三区四区在线观看 | 综合激情久久 | 午夜视频大全 | 人人做人人澡人人爽欧美 | www.99热这里只有精品 | 国产黄色大片在线免费观看 | 国产在线一区二区 | 欧美韩一区二区 | 日韩二区| 日日日操| 久久国产成人 | 综合二区 | 成人国产精品久久 | 日韩欧美在线播放 | 午夜影院在线观看版 | 二区成人 | 91在线影院| 综合另类 | 免费激情网站 | 亚洲在线| 亚洲欧美精品 | 中文字幕第100页 | 免费xxxx大片国产在线 | 亚洲精品一区二区三区丝袜 | 精品久久久久久亚洲精品 | av一二三区 | 婷婷综合网 | 久久免费观看一级毛片 | 欧美中文字幕一区 | 欧美a级成人淫片免费看 | 国产成人福利视频在线观看 |