为什么XCTAssertEqual甚至在我为NSRange添加“==”之后才将NSRange作为参数?

时间:2016-03-23 01:22:20

标签: swift

示例代码:

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

警告说:无法使用类型'(NSRange,NSRange)'的参数列表调用'XCTAssertEqual'。

是因为NSRange实际上是一个元组吗?如果我没记错的话,当我想要放置元组时,我也遇到了同样的事情。

提前致谢,

力维

2 个答案:

答案 0 :(得分:2)

这只是因为你忘了将NSRange声明为Equatable:

extension NSRange : Equatable {}

答案 1 :(得分:1)

只是为了补充更多信息,因为我没有冷静下来并在第一时间阅读指南。以下是Apple's programming guide says

  

如果某种类型已符合协议的所有要求,   但尚未声明它采用该协议,你可以做到   采用具有空扩展名的协议

     

类型不会仅仅通过满足它来自动采用协议   要求。他们必须始终明确宣布他们的采用   协议。