2016-03-21 16 views
0

Wenn NSLayoutConstraint Elemente testen, diese Linie nicht kompiliert:Generic XCTAssertEqual mit AnyObject-Argumenten?

XCTAssertEqual(firstItem, view1) 

Error: Cannot invoke 'XCTAssertEqual' with an argument list of type '(AnyObject, AnyObject)'

es ohne Fehler oder Warnungen zu kompilieren zu erhalten, habe ich zu tun:

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

Aber ich don weiß nicht, ob entweder firstItem oder ein UIView oder ein UILayoutSupport usw.

sein wird

Gibt es also eine generische Möglichkeit, dies zu testen?

Für Kontext, ich mache das Innere einer Testhilfsmethode schrieb ich:

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) 
    } 
} 
+0

Was ist, wenn Sie gerade eine Funktion erstellt haben, die bei einem 'AnyObject'-Vergleich' true' zurückgibt und stattdessen 'XCTAsertTrue' verwendet? – sschale

+0

Danke. Ich googelte ** swift vergleichen anyobject ** und fand die Antwort. – ma11hew28

+0

SwiftHamcrest bietet eine andere Option: 'assertThat (firstItem, selbeInstance (view1))' –

Antwort