¿Cómo hacer genéricos en la restricción de tipo de colección?

He estado tratando de extraer valores no nulos de la matriz de cadenas. Como abajo. Pero mi superior quiere que pueda extraervalores no nulos de otros tipos también.

Yo leo,genéricos podría ayudarme a manejar diferentes tipos. ¿Cómo puedo usar genéricos para poder usar la extensión siguiente como para trabajar también con otros tipos?

getNonNil debe devolver los valores no nulos extraídos del tipo específico (es decir,si la matriz es [String?] debe devolver [String], devuelve [Int] if [Int?])

Porque tengo que hacer más cálculos.

Lo que he intentado está a continuación:

import Foundation
// Extended the collection-type so that collectiontype is constrained to having element with optional strings
extension CollectionType where Self.Generator.Element == Optional<String>{
    func getNonNil() -> [String] {
        // filter out all nil elements and forcefully unwrap them using map
        return self.filter({$0 != nil}).map({$0!})
    }
}

// Usage
let x: [String?] = ["Er", "Err", nil, "errr"]

x.getNonNil().forEach { (str) in
    print(str)
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta