给定以下类,如何将两个实例中的所有值相互比较?
// Client Object
//
class PLClient {
var name = String()
var id = String()
var email = String()
var mobile = String()
var companyId = String()
var companyName = String()
convenience init (copyFrom: PLClient) {
self.init()
self.name = copyFrom.name
self.email = copyFrom.email
self.mobile = copyFrom.mobile
self.companyId = copyFrom.companyId
self.companyName = copyFrom.companyName
}
}
var clientOne = PLClient()
var clientTwo = PLClient(copyFrom: clientOne)
if clientOne == clientTwo { // Binary operator "==" cannot be applied to two PLClient operands
println("No changes made")
} else {
println("Changes made. Updating server.")
}
这个用例是在一个从服务器呈现数据的应用程序中。一旦数据被转换为对象,就会生成该对象的副本。用户能够编辑各种字段等。这会更改其中一个对象中的值。
可能已更新的主对象需要与该对象的副本进行比较。如果对象相等(所有属性的值都相同),则什么也不会发生。如果任何值不相等,则应用程序将更改提交给服务器。
如代码示例所示,==
运算符未被接受,因为未指定值。使用 ===
不会达到预期的结果,因为它们始终是两个独立的实例。
最佳答案
表明你的类符合Equatable协议(protocol),然后实现==运算符。
像这样:
class PLClient: Equatable
{
var name = String()
var id = String()
var email = String()
var mobile = String()
var companyId = String()
var companyName = String()
//The rest of your class code goes here
public static func ==(lhs: PLClient, rhs: PLClient) -> Bool{
return
lhs.name == rhs.name &&
lhs.id == rhs.id &&
lhs.email == rhs.email &&
lhs.mobile == rhs.mobile &&
lhs.companyId == rhs.companyId &&
lhs.companyName == rhs.companyName
}
}
关于class - 在 Swift 中比较一个对象的两个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30105272/