我有一个类(class)电子邮件
:
import SwiftyJSON
class Email: NSObject {
required init?(JSON jsonObject: AnyObject) {
let emailJsonObject = JSON(jsonObject)
self.email = emailJsonObject["emailaddress"].stringValue
self.emailType = emailJsonObject["emailtype"].stringValue
}
var email: String
var emailType: String
}
func == (lhs: Email, rhs: Email) -> Bool {
return lhs.email == rhs.email && lhs.emailType == rhs.emailType
}
现在,如果我有两个数组
:
let newEmails = emailsJsonObjects.map({ return Email(JSON: $0)! }).sort({ $0.0.email < $0.1.email })
let currentEmails = (self.emails as! [Email]).sort({ $0.0.email < $0.1.email })
两者都有一个元素,并且具有相同的 email
和 emailType
,这是我通过比较它们得到的结果:
(lldb) po newEmails.count
1
(lldb) po currentEmails.count
1
(lldb) po newEmails == currentEmails
false
(lldb) po newEmails[0] == currentEmails[0]
true
我错过了什么吗?比较有不同吗?
最佳答案
问题是,因为您的对象继承自 NSObject
,所以数组使用 isEqual()
来比较数组元素。将以下覆盖添加到您的类定义中
override func isEqual(object: AnyObject?) -> Bool
{
if let rhs = object as? Email
{
return self.email == rhs.email && self.emailType == rhs.emailType
}
return false
}
一切都应该没问题。
关于ios - Swift 上的数组比较未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37209579/