【问题标题】:Binary operator '===' cannot be applied to operands of type 'Self.Element' and 'AnyObject'二元运算符“===”不能应用于“Self.Element”和“AnyObject”类型的操作数
【发布时间】:2018-05-14 09:02:40
【问题描述】:

我收到以下错误:二元运算符'==='不能应用于'Self.Element'和'AnyObject'类型的操作数就行了:return contains { $0 === object }

有没有办法将object 转换为Iterator.Element 的类型? where Iterator.Element: AnyObject 这行是否意味着Iterator.Element 必须可以表示为AnyObject

extension Sequence where Iterator.Element: AnyObject {

    /**
     - Parameter object:
     */
    func containsObjectIdentical(to object: AnyObject) -> Bool {
        return contains { $0 === object }
    }

}

感谢您对此事的任何帮助。

【问题讨论】:

    标签: swift sequence swift4.1 xcode9.3 anyobject


    【解决方案1】:

    这是一个错误SR-7275(实际上是一个回归)。它应该已经在 Xcode 9.3.1 中修复。

    只需从where 子句中删除Iterator

    extension Sequence where Element: AnyObject {
        func containsObjectIdentical(to object: AnyObject) -> Bool {
            return contains { $0 === object }
        }
    }
    

    虽然SequenceSelf.ElementSelf.Iterator.Element 相同,但编译器似乎看不到传递相等性。

    另外,您可以考虑使方法类型安全,并且只与Element 类型的对象进行比较:

    extension Sequence where Element: AnyObject {
        func containsObjectIdentical(to object: Element) -> Bool {
            return contains { $0 === object }
        }
    }
    

    【讨论】:

    • @Sulthan 感谢您的帮助 - 这似乎解决了问题。
    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多