自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在声明时被强制展开。这不是应该完全避免对该对象进行解包吗?

最佳答案

实际上,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])
  }
}

关于ios - 为什么收到警告“表达式从'xx隐式强制'?”去任何'”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56478438/

10-13 04:05