ios - Swift 的 equatable 协议(protocol)一致性检查

标签 ios swift

我正在尝试扩展 Swift 的 Array具有以下功能的类:

func containsObjectIdenticalTo(obj: T) -> Bool {
    // objectPassingTest returns the first object passing the test
    return objectPassingTest { x in x == obj }
}

显然,这不会编译,因为编译器还不知道 == 是否存在。为 T 类型实现.然后我将代码更改为这个

func containsObjectIdenticalTo(obj: T) -> Bool {
    return objectPassingTest {
        x in
        assert(x is Equatable && obj is Equatable)
        return (x as Equatable) == (obj as Equatable)
    } != nil
}

这也不起作用,因为符合 Equatable无法检查(因为 Equatable 没有用 @obj 定义)!

对此有什么想法吗?如果 T 有某种方法可以直接断言,那就太好了符合 Equatable ,但我没有在任何地方读过。在这些方面,Swift 似乎不如 Obj-C 动态。

更新: 尝试了这个建议,但它不起作用(不知道 <T: Equatable> 的确切用途,但它确实可以编译)。

func containsObjectIdenticalTo<T: Equatable>(obj: T) -> Bool {
    var x = self[0]
    var y = self[0]
    return x == y // Error here
}

最佳答案

在方法的签名中指定 T 必须是相等的:

func containsObjectIdenticalTo<T: Equatable>(obj: T) -> Bool {/*...*/}

关于ios - Swift 的 equatable 协议(protocol)一致性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174697/

相关文章:

ios - 按内容调整 TextView 的大小

ios - 为什么 UI 事件在 Swift/Objective-C 中不是线程安全的?

ios - 带有 UITextView 的 UIView 随 UIScrollView 的 dismiss interactive 一起移动

ios - 如何在 iOS 中使用 FieldValue.serverTimestamp() 作为模型类 - swift

swift - 使这个 Swift 代码变得更智能的最佳方法是什么?

ios - 如何从数据源来自另一个 swift 文件的 tableView 激活 segue?

iphone - 如何像sqlite一样将整数值保存到NSuserDefault?

ios - 在 IOS Ionic 2 上打开外部 URL

ios - Swift 3 解析 JSON 数组然后循环

ios - 奇怪的 Swift 的#selector 行为。通过#selector 参数的值完全不同