Как сделать дженерики в ограничении типа коллекции?
Я пытался извлечь ненулевые значения из массива 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)
}