为什么===不能和Swift中的String一起使用?我无法编译以下内容:
let string1 = "Bob"
let string2 = "Fred"
if string1 === string2 {
...
}
Run Code Online (Sandbox Code Playgroud)
并获得以下错误(在if行上):
二进制运算符'==='不能应用于两个'String'操作数
我希望在我的单元测试中能够做的是,执行了copyWithZone :,验证两个对象确实是一个具有不同指针的不同对象,即使它们的值相同.以下代码不起作用......
XCTAssertFalse(object1.someString === object2.someString)
如果有人知道另一种方式请告知.
===默认情况下,Swift的运算符仅为类定义.
Swift的String类型不是类,而是结构.它不会继承AnyObject,因此无法通过引用进行比较.
你当然===可以String在Swift中实现一个运算符,但是我不确定它与==Swift String类型的实现有什么不同.
func ===(lhs: String, rhs: String) -> Bool {
return lhs == rhs
}
Run Code Online (Sandbox Code Playgroud)
当然,除非你真的想比较参考文献,否则我想你可以这样做:
func ===(lhs: String, rhs: String) -> Bool {
return unsafeAddressOf(lhs) == unsafeAddressOf(rhs)
}
Run Code Online (Sandbox Code Playgroud)
但是,为了测试,而不是使用==或===运算符,您应该使用适当的断言:
XCTAssertEqual(foo, bar)
XCTAssertNotEqual(foo, bar)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3074 次 |
| 最近记录: |