Общий XCTAssertEqual с аргументами AnyObject?
При тестировании NSLayoutConstraint
элементы, эта строка не компилируется:
XCTAssertEqual(firstItem, view1)
Ошибка: невозможно вызвать 'XCTAssertEqual' со списком аргументов типа '(AnyObject, AnyObject)'
Чтобы он скомпилировался без ошибок или предупреждений, мне нужно сделать:
XCTAssertEqual(firstItem as? UIView, view1 as? UIView)
Но я не знаю, если либо firstItem
или же view1
будет UIView
или UILayoutSupport
, так далее.
Итак, есть ли общий способ проверить это?
Для контекста, я делаю это внутри тестового вспомогательного метода, который я написал:
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)
}
}
1 ответ
Пытаться XCTAssertTrue(firstItem === view1)
,
Идентификационный оператор Swift === позволяет сравнивать AnyObject
s в Swift без приведения их к определенному типу.