Как сделать дженерики в ограничении типа коллекции?

Я пытался извлечь ненулевые значения из массива String. Как ниже. Но мой старший хочет, чтобы он мог извлечьненулевые значения из других типов тоже.

Я читаю,дженерики может помочь мне для обработки разных типов. Как я могу использовать дженерики, чтобы я мог использовать следующее расширение как для работы с другими типами?

getNonNil должен возвращать извлеченные ненулевые значения определенного типа (т.е.если массив [String?], он должен возвращать [String], возвращает [Int], если [Int?])

Потому что я должен делать дальнейшие расчеты.

То, что я попробовал, ниже:

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

Ответы на вопрос(3)

Ваш ответ на вопрос