1

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

 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 时,我收到了以下警告。显示的警告如下所示: 警告

如何解决此警告?

4

2 回答 2

2

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

open override func closeLeft(){
    guard let leftVC = leftViewController else { return }

    self.delegate?.leftWillClose?()
    leftVC.beginAppearanceTransition(isLeftHidden(), animated: true)
    closeLeftWithVelocity(0.0)
    setCloseWindowLevel()
}
于 2017-08-25T13:22:21.220 回答
1

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

而不是稍后测试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只展开一次,而不是两次。

于 2017-08-25T13:39:30.960 回答