在Objective-C中,你会按照

- (BOOL)isEqual:(id)other {
    if (other == self)
        return YES;
    if (!other || ![other isKindOfClass:[self class]])
        return NO;
    return [self.customProperty isEqual:other.customProperty];
}

我在Swift 的第一次天真try 如下

func isEqual(other: AnyObject) -> Boolean {
    if self === other {
        return true
    }
    if let otherTyped = other as? MyType {
        return self.myProperty == otherTyper.myProperty
    }
    return false
}

但我对它一点也不满意.我甚至不知道签名是否正确,或者我们是否应该使用isEqual以外的任何东西.

有什么 idea 吗?

编辑:

推荐答案

是的,您需要覆盖isEqual(和hash)以使对象完全与Objective-C兼容.下面是一个可用于操场的语法示例:

import Foundation

class MyClass: NSObject {

    var value = 5

    override func isEqual(object: AnyObject?) -> Bool {
        if let object = object as? MyClass {
            return value == object.value
        } else {
            return false
        }
    }

    override var hash: Int {
        return value.hashValue
    }
}

var x = MyClass()
var y = MyClass()
var set = NSMutableSet()

x.value = 10
y.value = 10
set.addObject(x)

x.isEqual(y) // true
set.containsObject(y) // true

(从Xcode 6.3开始的当前语法)

Swift相关问答推荐

如何避免使用DispatchSemaphores时线程爆炸?

map 视图上的SwiftUI渐变折线

background Task(.backgroundTask)不适用于MySQL

如何异步返回视图?什么?

NavigationLink和ObservableObject的动画片段

Swift通过设置变量B自动设置变量A的值

如何从UIKit中的AttributeContainer获取属性并将其分配给某个变量

OSX 中的 Popover 无法确定透明度

SwiftUI路径平滑连接两条线

在Equatable上引用运算符函数==要求Dictionary.Values符合Equatable

类型擦除`AsyncMapSequence, Element>`

如何延迟 swift 属性 didSet 使其每秒只触发一次

如何在 Swift 中对单个单词进行词形还原

对齐时如何避免图像尺寸缩小

如何在 SwiftUI 中正确实现Collection 夹?

如何在不阻塞 UI 更新的情况下使用 Swift Concurrency 在后台执行 CPU 密集型任务?

使用 swift 运行 pod install 时出错

由于编译器中的内部保护级别,无法访问框架 init 中的公共 struct

如何在 Swift 中遍历 struct 属性?

将活动指示器 colored颜色 更改为黑色