Función de matriz genérica rápida para encontrar todos los índices de elementos que no coinciden con el elemento

Swift 3

Intentando escribir una extensión de matriz genérica que obtenga todos los índices de elementos que NO tengan el mismo valor

ejemplo

 let arr: [String] = ["Empty", "Empty", "Full", "Empty", "Full"]
 let result: [Int] = arr.indexes(ofItemsNotEqualTo item: "Empty")
 //returns [2, 4]

Traté de hacer una función genérica:

extension Array {

    func indexes<T: Equatable>(ofItemsNotEqualTo item: T) -> [Int]?  {
        var result: [Int] = []
        for (n,, elem) in self.enumerated() {
            if elem  != item {
                result.append(n)
            }
        }
        return result.isEmpty ? nil : result
    }
}

Pero eso da una advertencia:El operador binario no se puede aplicar a operandos de tipo "Elemento" y "T".

Entonces hice esto donde lancé el elemento (tenga en cuenta el¿como?)

extension Array {

    func indexes<T: Equatable>(ofItemsNotEqualTo item: T) -> [Int]?  {
        var result: [Int] = []
        for (n, elem) in self.enumerated() {
            if elem as? T != item {
                result.append(n)
            }
        }
        return result.isEmpty ? nil : result
    }
}

Pero ahora parece que la verificación de tipo se ha ido por la ventana, porque si paso un número entero obtengo el resultado incorrecto

 let arr: [String] = ["Empty", "Empty", "Full", "Empty", "Full"]
 let result: [Int] = arr.indexes(ofItemsNotEqualTo item: 100)
 //returns [0, 1, 2, 3, 4]

La ayuda sería muy apreciada.

¿Hay una mejor manera de hacer esto con elreducir ¿función?

Respuestas a la pregunta(1)

Su respuesta a la pregunta