字符串不相等的 XCTAssert

Posted

技术标签:

【中文标题】字符串不相等的 XCTAssert【英文标题】:XCTAssert with String not Equatable 【发布时间】:2014-11-29 21:32:05 【问题描述】:

为什么会这样

var sb = NSStoryboard(name: "Main", bundle: nil)
var wc = sb?.instantiateControllerWithIdentifier("pref") as NSWindowController
XCTAssertEqual(wc.window?.title, "Preferences", "Preferences window must have title Preferences")

给我Type 'String?' does not conform to protocol 'Equatable' 错误

 var sb = NSStoryboard(name: "Main", bundle: nil)
 var wc = sb?.instantiateControllerWithIdentifier("pref") as NSWindowController
 XCTAssert(window.window?.title == "Preferences", "Preferences window must have title Preferences")

没有?

【问题讨论】:

【参考方案1】:

创建Equatable Optional<T> 是不可能的,因为T 本身可能不是Equatable 并且不能在实例声明中被约束。所以,Optionals 的 == 运算符像这样重载了

func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool

但没有对应的 Equatable 实例与之配套。最终结果是 Optionals 可以与== 进行比较,但可能无法提供给泛型Equatable 类型(如XCTAssertEqual)的方法。具有真正约束的类型系统的另一个重要论据......

【讨论】:

以上是关于字符串不相等的 XCTAssert的主要内容,如果未能解决你的问题,请参考以下文章

Shell 字符串比较相等、不相等方法小结

如何验证使用 XCTAssert 调用了类方法?

字符串问题

Shell字符串比较相等不相等方法小结

字符串中的各种“空” null 0

使用相等 (===) 或不相等 (!==) 运算符是不是更高效?