Wie erstelle ich Generika in Auflistungstypen?

Ich habe versucht, Nicht-Null-Werte aus dem String-Array zu extrahieren. Wie unten. Aber mein Senior möchte, dass es in der Lage ist, @ zu extrahiere non-nil values auch von anderen Typen.

Ich lese, generics könnte mir beim Umgang mit verschiedenen Typen helfen. Wie kann ich Generika verwenden, damit ich die folgenden Erweiterungen auch für andere Typen verwenden kann?

getNonNil muss die extrahierten Nicht-Null-Werte des bestimmten Typs zurückgeben (d. h.wenn das Array [String?] ist, muss es [String] zurückgeben, gibt [Int] zurück, wenn [Int?])

eil ich weitere Berechnungen anstellen mus

as ich ausprobiert habe ist unten:

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)
}