如何解决气旋复杂性? - RxDataSource RxSwift - SwiftLint
Posted
技术标签:
【中文标题】如何解决气旋复杂性? - RxDataSource RxSwift - SwiftLint【英文标题】:How to fix Cyclonemtic Complexity? - RxDataSource RxSwift - SwiftLint 【发布时间】:2022-01-13 13:23:49 【问题描述】:当我使用 RxDataSource 时,我遇到了这样的警告“违反循环复杂度:函数的复杂度应为 10 或更低:当前复杂度等于 14 (cyclomatic_complexity)”。
我的代码结构是这样的:
struct ItemDetailDataSource
typealias DataSource = RxTableViewSectionedReloadDataSource
static func dataSource() -> DataSource<ItemDetailTableViewSection>
return .init(configureCell: (dataSource, tableView, indexPath, _) -> UITableViewCell in
switch dataSource[indexPath]
case .itemInfoTopItem(let info):
guard let cell = tableView.dequeueReusableCell(withIdentifier: ConstantsForCell.infoTopTableViewCell,
for: indexPath)
as? InfoTopTableViewCell else
return UITableViewCell()
cell.configure(info)
return cell
case .itemHintItem(let hint):
...
case .itemManaColdownItem(let manacd):
case .itemNotesItem(let notes):
case .itemAttribItem(let attrib):
case .itemLoreItem(let lore):
case .itemComponentsItem(let components):
谁能帮我解决这个问题?非常感谢。
【问题讨论】:
圈复杂度随着每个控制语句(for、if、case 等)的增加而增加。这实际上更像是一个代码审查问题。您还可以研究如何降低圈复杂度。 非常感谢,我已经研究了很多次,但也许对我来说太难了:((( 【参考方案1】:这里的解决方案是不要为您的单元格项目使用枚举。一个可能的解决方案如下:
struct DisplayableItem
let makeCell: (UITableView, IndexPath) -> UITableViewCell
struct ItemDetailDataSource
typealias DataSource = RxTableViewSectionedReloadDataSource
static func dataSource() -> DataSource<ItemDetailTableViewSection>
.init _, tableView, indexPath, item in
item.makeCell(tableView, indexPath)
每个 DisplayableItem 都被赋予了制作 UITableViewCell 的方法。你可以使用上面的闭包,或者使用协议和一堆子类来实现。
【讨论】:
以上是关于如何解决气旋复杂性? - RxDataSource RxSwift - SwiftLint的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 RxDatasource 在 UICollectionView 中创建具有多个标题的多个部分