0

次のエラーが表示されます:二項演算子 '===' は、行のタイプ 'Self.Element' および 'AnyObject' のオペランドに適用できません: return contains { $0 === object }.

objectの型にキャストする方法はありIterator.Elementますか? この行は、が として表現可能でなければならwhere Iterator.Element: AnyObjectないという意味ではありませんか?Iterator.ElementAnyObject

extension Sequence where Iterator.Element: AnyObject {

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

}

この件についてご協力いただきありがとうございます。

4

1 に答える 1

2

これはバグSR-7275 (実際にはリグレッション) です。Xcode 9.3.1 ではすでに修正されているはずです。

Iteratorから を削除するだけです。where

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

Self.ElementSelf.Iterator.Elementforは同じですが、コンパイラは推移的な等価性をSequence認識できないようです。

また、メソッドの型を安全にすることを検討し、 type のオブジェクトのみと比較することもできますElement

extension Sequence where Element: AnyObject {
    func containsObjectIdentical(to object: Element) -> Bool {
        return contains { $0 === object }
    }
}
于 2018-05-14T09:06:55.533 に答える