Erstellen einer Erweiterung zum Filtern von Nils aus einem Array in Swift

Ich versuche, eine Erweiterung für Array zu schreiben, mit der ein Array optionaler T in ein Array nicht optionaler T umgewandelt werden kann.

z.B. Dies könnte als freie Funktion wie folgt geschrieben werden:

func removeAllNils(array: [T?]) -> [T] {
    return array
        .filter({ $0 != nil })   // remove nils, still a [T?]
        .map({ $0! })            // convert each element from a T? to a T
}

Aber ich kann das nicht als Erweiterung nutzen. Ich versuche dem Compiler mitzuteilen, dass die Erweiterung nur für Arrays mit optionalen Werten gilt. Das habe ich bisher:

extension Array {
    func filterNils<U, T: Optional<U>>() -> [U] {
        return filter({ $0 != nil }).map({ $0! })
    }
}

(es wird nicht kompiliert!)

Antworten auf die Frage(12)

Ihre Antwort auf die Frage