2
私はString配列から非nil値を抽出しようとしています。以下のように。しかし、私のシニアは、それ以外のタイプのでも0以外の値を抽出できるようにしたいと考えています。コレクション型制約でジェネリックを作成する方法は?
私が読んだgenericは、さまざまな種類の処理に役立ちます。どのようにジェネリックスを使用すれば、他のタイプのエクステンションと同じように使用できますか?
getNonNil
(配列である場合、すなわち[文字列?]は[文字列]を返す必要があり、戻り[INT]場合の[int?])特定のタイプの抽出された非ゼロ値を返す必要があり
ため私はさらに計算をしなければならない。私が試してみました何
は以下の通りです:あなたは、単に一般的に、あなたが(オプションのタイプにプロトコルを紹介することができ、元の質問については
x.flatMap { $0 }
// returns ["Er", "Err", "errr"] which is [String]
を使用することができますgetNonNil
については
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)
}