首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环复杂度冲突:函数的复杂度应该在10以下:当前复杂度等于13 (cyclomatic_complexity)

循环复杂度冲突:函数的复杂度应该在10以下:当前复杂度等于13 (cyclomatic_complexity)
EN

Stack Overflow用户
提问于 2017-08-25 23:39:54
回答 5查看 28.2K关注 0票数 27

我在swift3中有下面的代码,并且我正在使用快速链接来分析代码。守则如下:

代码语言:javascript
复制
    func selectedMenuInLoggedOutState(sender: UIButton) {
    switch sender.tag {
    case 1:
      if let menu = LeftGuestMenu(rawValue: 0) {
        self.changeGuestViewController(menu)
      }
    case 2:
      if let menu = LeftGuestMenu(rawValue: 1) {
        self.changeGuestViewController(menu)
      }
    case 3:
      if let menu = LeftGuestMenu(rawValue: 2) {
        self.changeGuestViewController(menu)
      }
    case 4:
      if let menu = LeftGuestMenu(rawValue: 3) {
        self.changeGuestViewController(menu)
      }
    case 5:
      if let menu = LeftGuestMenu(rawValue: 4) {
        self.changeGuestViewController(menu)
      }
    case 6:
      if let menu = LeftGuestMenu(rawValue: 5) {
        self.changeGuestViewController(menu)
      }
    default:
      break
    }
  }

迅速的林特产生了一个“圈复杂度违规”警告。为什么会出现此警告,以及如何解决?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-25 23:48:12

出现此警告是因为指标定义的函数过于复杂,它本质上计算了需要作出的决策的数量。

在这种特殊情况下,避免这种情况的一个简单方法是使用一些简单的数学:

代码语言:javascript
复制
func selectedMenuInLoggedOutState(sender: UIButton) {
    guard let menu = LeftGuestMenu(rawValue: sender.tag - 1) else { return }
    self.changeGuestViewController(menu)
}
票数 23
EN

Stack Overflow用户

发布于 2018-07-07 09:56:23

该方法是太复杂的。但是,您可以将switches排除在cyclomatic_complexity计算之外(因为它们完全可读),而不是重写代码,如下所示:

代码语言:javascript
复制
cyclomatic_complexity:
  ignores_case_statements: true
票数 53
EN

Stack Overflow用户

发布于 2019-05-01 09:48:11

您可以在这样的代码中禁用swiftlint警告:

代码语言:javascript
复制
// swiftlint:disable cyclomatic_complexity
func selectedMenuInLoggedOutState(sender: UIButton) {
    ...
}
// swiftlint:enable cyclomatic_complexity

或者,如果您想要显式地禁用下一个迅捷警告:

代码语言:javascript
复制
// swiftlint:disable:next cyclomatic_complexity
func selectedMenuInLoggedOutState(sender: UIButton) {
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45890629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档