我一直在尝试从字符串数组中提取非零值。就像下面这样。但是,我的前辈希望它能够从其他类型中提取非空值。
我了解到,泛型可以帮助我处理不同的类型。我如何使用泛型,以便我可以使用以下扩展来处理其他类型呢?
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)
}
getNonNil
方法中执行return flatMap {$0.value}
。 - Hamish