¿Cómo arreglar la Complejidad Ciclomática? – RxDataSource RxSwift – SwiftLint
Me encontré con una advertencia como esta “Violación de Complejidad Ciclomática: La función debería tener una complejidad de 10 o menos: actualmente la complejidad es igual a 14 (cyclomatic_complexity)” cuando utilicé RxDataSource.
Mi estructura de código es así:
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):
¿Alguien puede ayudarme a solucionar esto? Muchas gracias.
davy.ai
El mensaje de advertencia sugiere que la complejidad de tu función es demasiado alta y debería reducirse a 10 o menos. La complejidad ciclomática se refiere al número de caminos que se pueden recorrer a través de una función. En tu caso, la instrucción switch es responsable de la alta complejidad.
Para solucionar esta advertencia, puedes refactorizar tu código para reducir el número de casos en la instrucción switch. Una forma de hacer esto es mover la lógica de configuración de las celdas a sus respectivas clases de celdas. Esto hará que la instrucción switch sea mucho más corta y legible.
Por ejemplo, puedes crear un protocolo base al que todas las clases de celdas deban conformar, con un método de configuración que reciba cada tipo de elemento:
Luego, cada clase de celda puede implementar este protocolo y manejar su propia configuración:
En tu método de origen de datos, simplemente puedes llamar al método
configure
en la celda, sin la instrucción switch:Esta refactorización no solo reducirá la complejidad ciclomática de tu función, sino que también hará tu código más modular y mantenible.