Swift 上的数组比较未按预期工作

Array comparison on Swift not working as expected

我有一个 class Email:

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
}

现在如果我有两个 Arrays:

let newEmails = emailsJsonObjects.map({ return Email(JSON: [=12=])! }).sort({ [=12=].0.email < [=12=].1.email })

let currentEmails = (self.emails as! [Email]).sort({ [=12=].0.email < [=12=].1.email })

两者各有一个元素,而且emailemailType相同,我比较了一下:

(lldb) po newEmails.count
1

(lldb) po currentEmails.count
1

(lldb) po newEmails == currentEmails
false

(lldb) po newEmails[0] == currentEmails[0]
true

我错过了什么吗?比较有区别吗?

问题在于,因为您的对象继承自 NSObject,所以数组使用 isEqual() 来比较数组元素。将以下覆盖添加到您的 class 定义

override func isEqual(object: AnyObject?) -> Bool
{
    if let rhs = object as? Email
    {
        return self.email == rhs.email && self.emailType == rhs.emailType
    }
    return false
}

应该没问题。