为什么收到警告“表达式从'xx隐式强制'?”去任何'”?

时间:2019-06-06 13:17:17

标签: ios swift optional swift5

自swift5起,我得到了一个令我非常困惑的警告...

当我的视图中有可以修改的约束时,通常如下所示:

class myView: UIView {

    let titleLabel = UILabel()
    let descriptionLabel = UILabel()

    var titlePaddingConstraint: NSLayoutConstraint!

    func setupConstraints() {
        self.titlePaddingConstraint = self.titleLabel.bottomAnchor.constraint(equalTo: self.descriptionLabel.topAnchor, constant: -20)

        NSLayoutConstraint.activate([
            self.titlePaddingConstraint //warning here
        ])
    }
}

XCode最后一行第四行抱怨:

  

从'NSLayoutConstraint?'隐式强制了表达式?到“任何”

要使其关闭,必须添加“ bang运算符(!)”以将其解包。为什么现在需要? titlePaddingConstraint在声明时被强制展开。这不是要完全避免对该对象进行包装吗?

1 个答案:

答案 0 :(得分:0)

实际上,activate方法接受一个NSLayoutContstraints数组,您在其中犯错。将您的班级更新为

class MyView: UIView {

  let titleLabel = UILabel()
  let descriptionLabel = UILabel()

  var titlePaddingConstraint: NSLayoutConstraint!

  func setupConstraints() {
    self.titlePaddingConstraint = self.titleLabel.bottomAnchor.constraint(equalTo: self.descriptionLabel.topAnchor, constant: -20)

    NSLayoutConstraint.activate([self.titlePaddingConstraint])
  }
}