字符串不相等的 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的主要内容,如果未能解决你的问题,请参考以下文章