【问题标题】:Unused Optional Binding Violation: Prefer `!= nil` over `let _ =` (unused_optional_binding) while using swiftlint未使用的可选绑定违规:使用 swiftlint 时更喜欢 `!= nil` 而不是 `let _ =` (unused_optional_binding)
【发布时间】:2018-02-03 13:28:30
【问题描述】:

我已经为滑动菜单控制器定义了一个类。所以我得到了如下代码:

 open override func closeLeft() {
    guard let _ = leftViewController else { // If leftViewController is nil, then return
      return
    }
    self.delegate?.leftWillClose?()
    leftViewController?.beginAppearanceTransition(isLeftHidden(), animated: true)
    closeLeftWithVelocity(0.0)
    setCloseWindowLevel()
  }

但我在使用 swift lint 进行 linting 时收到以下警告。显示的警告如下所示:

如何解决这个警告?

【问题讨论】:

    标签: ios swift3 swiftlint


    【解决方案1】:

    可选绑定的重点是获取原始可选对象的安全解包副本,您可以安全地使用它,即使您的原始对象也可以被其他线程修改。所以不要丢弃安全解包的值,稍后使用该值而不是对可选值进行可选链接。

    open override func closeLeft(){
        guard let leftVC = leftViewController else { return }
    
        self.delegate?.leftWillClose?()
        leftVC.beginAppearanceTransition(isLeftHidden(), animated: true)
        closeLeftWithVelocity(0.0)
        setCloseWindowLevel()
    }
    

    【讨论】:

      【解决方案2】:

      不要丢弃可选绑定的值,使用它!

      而不是测试nil,然后再进行可选链接

      open override func closeLeft() {
          guard let _ = leftViewController else { return } 
          // ...
          leftViewController?.beginAppearanceTransition(isLeftHidden(), animated: true)
          // ...
      }
      

      将解包后的值赋给一个局部变量并使用它:

      open override func closeLeft() {
          guard let leftVC = leftViewController else { return } 
          // ...
          leftVC.beginAppearanceTransition(isLeftHidden(), animated: true)
          // ...
      }
      

      这更简单,因为leftViewController 只解包一次, 不是两次。

      【讨论】:

        猜你喜欢
        • 2019-07-21
        • 2012-08-16
        • 2010-09-24
        • 2011-06-30
        • 2010-09-20
        • 2013-09-02
        • 2022-01-03
        • 1970-01-01
        相关资源
        最近更新 更多