【发布时间】:2019-08-14 20:27:35
【问题描述】:
我使用 Swift 5 并尝试测试 someView 的所有 NSLayoutContraints 是否与某些 otherView 相关:
@IBOutlet var someView: UIView!
@IBOutlet var otherView: UIView!
for constraint in someView.constraints {
if (constraint.firstItem == otherView) {
...
}
}
此代码失败并出现以下错误:
二元运算符“==”不能应用于类型的操作数 “任何物体?”和“UIView?”
关于 Swift 中的类型和运算符还有很多其他问题,但我仍然不明白为什么会出现这个错误以及如何解决它:
-
constraint.firstItem的类型为AnyObject?。所以它要么是nil,要么是AnyObject类型的对象 -
otherView是UIView!类型,所以保证不是nil,对吗?
据我所知AnyObject 是所有类都隐式遵守的协议。因此,将任何对象与AnyObject? 进行比较应该不是问题,不是吗?
那么,为什么constraint.firstItem == otherView 不起作用,正确的解决方法是什么?
额外问题:为什么错误消息提到UIView?而不是UIView!
【问题讨论】:
-
对于您的“额外问题”,请参阅例如stackoverflow.com/q/39633481/1187415。