Swift 2.0在包含NSObject子类时设置不正常

Swift 2.0在包含NSObject子类时设置不正常,第1张

概述将我们的代码库升级到 Swift2后,我遇到了异常的问题. Set不是预期的减法或联合. class A: NSObject { let h: Int init(h: Int) { self.h = h } override var hashValue: Int { return h }}func ==(lhs: A 将我们的代码库升级到 Swift2后,我遇到了异常的问题. Set不是预期的减法或联合.
class A: NSObject {    let h: Int    init(h: Int) {        self.h = h    }    overrIDe var hashValue: Int {        return h    }}func ==(lhs: A,rhs: A) -> Bool {    return lhs.hashValue == rhs.hashValue}let a = A(h: 1)let b = A(h: 1)var sa = Set([a])let sb = Set([b])sa.subtract(sb).count // Swift1.2 prints 0,Swift 2 prints 1sa.contains(a) // Swift1.2 true,Swift 2 truesa.contains(b) // Swift1.2 true,Swift 2 false

看起来新的Set没有使用hashValue进行内部 *** 作.任何想法是一个错误,或解决这个问题的方法?

我玩了你的代码了一下.我能够通过不再继承NSObject来使其工作,而是符合Hashable协议:
class A: Hashable {    let h: Int    init(h: Int) {        self.h = h    }    var hashValue: Int {        return h    }}func ==(lhs: A,Swift 2 falsea.hashValue == b.hashValue

当您从NSObject继承时,您的==重载实际上并未执行.如果你想让它与NSObject一起使用,你必须覆盖isEquals:

overrIDe func isEqual(object: AnyObject?) -> Bool {    if let object = object as? A {        return object.h == self.h    } else  {        return false    }}
总结

以上是内存溢出为你收集整理的Swift 2.0在包含NSObject子类设置不正常全部内容,希望文章能够帮你解决Swift 2.0在包含NSObject子类时设置不正常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1032523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存