Двоичный оператор '===' нельзя применить к операндам типа 'Self.Element' и 'AnyObject' - PullRequest
0 голосов
/ 14 мая 2018

Я получаю следующую ошибку: Двоичный оператор '===' нельзя применить к операндам типа '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 }
    }

}

Спасибо за любую помощь в этом вопросе.

1 Ответ

0 голосов
/ 14 мая 2018

Это ошибка SR-7275 (на самом деле регрессия). Это должно быть уже исправлено в Xcode 9.3.1.

Просто удалите Iterator из предложения where:

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

Хотя Self.Element и Self.Iterator.Element для Sequence одинаковы, кажется, что компилятор не может видеть транзитивное равенство.

Кроме того, вы можете подумать о том, чтобы сделать тип метода безопасным, и сравнивать его только с объектами типа Element:

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