2016-03-23 9 views
1

Beispielcode:Warum akzeptiert XCTAssertEqual NSRange nicht als Argumente, auch nachdem ich "==" für NSRange hinzugefügt habe?

import XCTest 

func == (lhs: NSRange, rhs: NSRange) -> Bool { 
    return lhs.location == rhs.location && lhs.length == rhs.length 
} 

class NSRangeInXCTAssertionEqualTests: XCTestCase { 
    func testNSRange() { 
     XCTAssertEqual(NSMakeRange(1, 3), NSMakeRange(2, 5)) 
    } 
} 

Die Warnung sagte: Kann nicht aufrufen 'XCTAssertEqual' mit einem Argument Liste vom Typ '(NSRange, NSRange)'.

Liegt es daran, dass NSRange eigentlich ein Tupel ist? Wenn ich mich richtig erinnere, stieß ich auf dasselbe, wenn ich auch Tuples platzieren wollte.

Vielen Dank im Voraus,

Liwei

Antwort

2

Es ist einfach, weil Sie NSRange als gleichzusetzen zu erklären vergessen:

extension NSRange : Equatable {} 
+0

Danke für Ihre Hilfe. – LiweiZ

1

Nur einige weitere Informationen hinzuzufügen, da ich nicht beruhigen und lesen Sie die Führer an erster Stelle. Es folgt, was Apple's programming guide says:

Wenn bereits ein Typ alle Anforderungen eines Protokolls entspricht, aber noch nicht festgestellt, dass es dieses Protokoll annimmt, können Sie es das Protokoll mit einer leeren Erweiterung nehmen machen

Typen nehmen ein Protokoll nicht automatisch an, nur indem sie die Anforderungen erfüllen. Sie müssen ihre Annahme des Protokolls immer ausdrücklich erklären.

Verwandte Themen