我正在开发一个验证系统来比较同一个类的两个实例。
我使用Reflection断言来比较实例的属性。但有时我们无法期望某些属性的确切值,如系统生成时间,随机数等。
示例:考虑具有以下属性的类。
Class => TransactionDetails
属性=> 1:transactionID 2:transactionStatus 3:transactionTime
TransactionDetails的实际实例
1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS
3: transactionTime : 2015-10-15T15:46:53.378+05:30
TransactionDetails的预期实例
1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS
3: transactionTime : 2015-10-15T15:39:29.127+05:30
断言的结果是=> false ,因为时间不同。
所以,如果我给出我想要的实例,如下,
具有有限(必需)值的TransactionDetails的预期实例
1: transactionID : 987DFGAS876
2: transactionStatus : SUCCESS
断言的结果是=> false 因为时差(null& 2015-10-15T15:46:53.378 + 05:30)
所以,在我的情况下,我需要只比较丰富的2个值和实际的实例,需要跳过属性 用户不想断言价值。
为了实现这一点,我正在进行反射以获取所有属性并使用实际实例检查预期实例中的丰富属性。
但这会导致大型实例的性能问题。有没有容易的 这个要求的解决方案?
请分享您的想法以解决此问题,提前致谢。
答案 0 :(得分:1)
您可以标记要与自定义注释进行比较的字段。那么你可以得到,如果你应该通过反射比较该领域:
Alamofire.request( .POST, API_URL, parameters: [ "action": "authenticate", "email": userEmail!, "password": userPassword! ] )
.responseString { response in
guard let value = response.result.value else
{
return App.alert( "error", message: "Did not receive data")
}
guard response.result.error == nil else
{
print( response.result.error )
return App.alert( "error", message: "An error occurred" )
}
App.log ( value )
}
答案 1 :(得分:1)
是否有特定的反思需求?您只需在有限的字段子集中生成equals
和hashcode
方法。
在eclipse中:菜单来源>生成hashcode()和equals()...然后检查要比较的字段。
这样可以避免因反思导致的性能问题......