给定以下类,如何将两个实例中的所有值相互比较?
// 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协议,然后实现==运算符。
像这样:
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 } }