Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift上的数组比较未按预期工作_Ios_Arrays_Swift_Comparison - Fatal编程技术网

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

Ios Swift上的数组比较未按预期工作,ios,arrays,swift,comparison,Ios,Arrays,Swift,Comparison,我收到一封班级电子邮件: import SwiftyJSON class Email: NSObject { required init?(JSON jsonObject: AnyObject) { let emailJsonObject = JSON(jsonObject) self.email = emailJsonObject["emailaddress"].stringValue self.emailType = emailJ

我收到一封班级
电子邮件

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 })

我错过什么了吗?比较是否不同

问题在于,由于对象继承自
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
}

这一切都应该很好。

newEmails==currentmails
询问这两个数组是否是相同的数组,而它们可能不是
newEmails[0]==currentEmails[0]
询问
newEmails
中索引0处的电子邮件是否与
currentEmails
中索引0处的电子邮件相同。Paulw11:我也这么认为,但根据这个(),它实际上贯穿了所有数组元素。我在一个操场上做了一些测试,它确实如预期的那样工作,但在这种情况下不起作用。也许它只是调试器。当你真正运行代码时(即,不在调试器中),它工作正常(返回
true
)还是失败(返回
false
)?所以基本上,如果
Email
类不需要是
NSObject
的子类,则应遵循
equalable
协议。因此,让Swift类遵循
NSObject
协议会带来可能的副作用。有趣。感谢info@JeremyP.interest:因此
=
函数在运行时没有映射到
isEqual:
。我不知道。我想知道这是否与
reference
类型与
value
类型有关。从某种意义上说,谢谢你的信息。默认的
isEqual
比较引用,如果不重写它,就会发生这种情况。就是这样!哇,太奇怪了。正如@robotcat所提到的,创建Swift类子类
NSObject
会带来副作用。有趣。谢谢你的帮助@dccarmo如果您仔细想想,在Objective-C中,覆盖
isEqual:
将是显而易见的。这里有点模糊,因为正在进行的隐式铸造。
override func isEqual(object: AnyObject?) -> Bool
{
    if let rhs = object as? Email
    {
        return self.email == rhs.email && self.emailType == rhs.emailType
    }
    return false
}