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

标签 ios arrays swift comparison

我有一个类(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 })

两者都有一个元素,并且具有相同的 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() 来比较数组元素。将以下覆盖添加到您的类定义中

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/

相关文章:

c++ - 如何自动推断结构模板中 C 数组的大小?

javascript - 加入嵌套数组

json - 在 Swift 中接收 Websocket 数据

ios - 解析 - 设置设备 token

ios - 如何在 Objective-C 中将完成处理程序分配给另一个完成处理程序

ios - git 差异 : How to ignore starting space of an empty line?

ios - iOS应用程序更新核心数据

ios - 测试 ApplePay SDK

ios - 使用 Metal 有效计算 UIImage/CIImage 中有多少透明像素

python - python 从json数组中删除多余的键值