2016-07-18 7 views
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) 
} 

答えて

関連する問題