2016-04-30 13 views
1

私は、指定されたカテゴリ名の値でフィルタリングされたレシピリストを返す次のフィルタリングを行っています。私はおそらく信頼できないデータを保持するためにfilteredRecipeを行いますテキストフィールドにランダムな値を持つことになりますので、フィルタがnilを返す場合、空の結果を返さない方法を教えてください。

filteredRecipe = filteredRecipe.filter({ 
    if let category = $0.valueForKey("category") as? NSManagedObject { 
     if let name = category.valueForKey("name") as? String { 
      return name.rangeOfString(cap) != nil 
     } else { 
      return false 
     } 
    } else { 
     return false 
    } 
}) 

このフィルタは、検索バーのテキストフィールドに関連して動作します。

filteredRecipeのレシピが特定のカテゴリ名の値で見つからない場合は、filteredRecipeのままにしておく必要があります。 現在、一致がない場合、filteredRecipeは空の配列[]になります。私はどの部分がこれを引き起こすのか分からない。

+0

私は、この言語に精通していないんだけど、このような多くの言語では、あなたは、単にあなたの最初の 'フィルタの最後に別の' .filter({$ 0!= nilの}) 'を追加することができるはずです(...) '呼び出し。 'filteredRecipe.filter(/ *元のフィルタコード* /)。filter({$ 0!= nil})'は動作しません。 – gmiley

+0

どうすれば 'let name = category.valueForKey(" name ")?文字列、a = name.rangeOfString(上限){戻り値} else {戻り値false} ' –

+1

' filteredRecipe'を返してみましたか? – Lawrence413

答えて

4

フィルタ結果を一時変数に割り当て、空でないことを確認する必要があります。

let filtered = filteredRecipe.filter({ 
    if let category = $0.valueForKey("category") as? NSManagedObject { 
     if let name = category.valueForKey("name") as? String { 
      return name.rangeOfString(cap) != nil 
    } 
    return false 
}) 

if !filtered.isEmpty { 
    filteredRecipe = filtered 
} 
+0

私はこれを試しましたが、 'filteredRecipe'を空の配列にしました[ –

+0

あなたの元の問題では、' filteredRecipe'はnilと言っていました。実際、それは空の配列ですか? – Paulw11

+0

実際には、 'filter'は' nil'や長さ0のコレクションを返しますか? – gmiley

関連する問題