0

测试NSLayoutConstraint项目时,此行不编译:

XCTAssertEqual(firstItem, view1)

错误:无法使用类型为“(AnyObject,AnyObject)”的参数列表调用“XCTAssertEqual”

为了让它编译没有错误或警告,我必须这样做:

XCTAssertEqual(firstItem as? UIView, view1 as? UIView)

但是,我不知道是否firstItemview1将是 aUIView或 aUILayoutSupport等。

那么,有没有通用的方法来测试呢?

对于上下文,我在我编写的测试辅助方法中执行此操作:

extension NSLayoutConstraint {
    func assert(item view1: AnyObject, toItem view2: AnyObject? = nil, attribute attr1: NSLayoutAttribute, relatedBy relation: NSLayoutRelation = .Equal, attribute attr2: NSLayoutAttribute? = nil, multiplier: CGFloat = 1, constant c: CGFloat = 0) {
        let attribute2: NSLayoutAttribute = view2 == nil ? .NotAnAttribute : (attr2 ?? attr1)
        XCTAssertEqual(firstItem as? UIView, view1 as? UIView)
        XCTAssertEqual(firstAttribute, attr1)
        XCTAssertEqual(self.relation, relation)
        XCTAssertEqual(secondItem as? UIView, view2 as? UIView)
        XCTAssertEqual(secondAttribute, attribute2)
        XCTAssertEqual(self.multiplier, multiplier)
        XCTAssertEqual(constant, c)
    }
}
4

1 回答 1

-1

试试XCTAssertTrue(firstItem === view1)

Swift 的标识运算符 === 让您可以AnyObject在 Swift 中比较 s 而无需将它们转换为特定的 type

于 2016-03-22T00:58:24.833 回答