2016-05-25 7 views
1

ある値を別の値と比較するために使用しようとしているフィルタがあります。enumを使用して値をフィルタリングしようとすると、あいまいなエラーが発生する

Cannot convert value of type '[SomeEnum]' to expected argument type 'String' 
:私はあいまいなエラーになってしまう

array.append(SomeEnum.values.filter({$0.rawValue == anotherArray["id"] as! String})) 

:私は一致する値をフィルタリングして見つけようとしていますのはここ

enum SomeEnum: String { 

    case first = "Hey" 
    case second = "There" 
    case third = "Peace" 

static let values = [first, second, third] 

func pickOne() -> String { 
     switch self { 
     case .first: 
      return "value 1" 
     case .second: 
      return "value 2" 
     case .third: 
      return "value 3" 
    } 
} 

される:ここで私が使用しています列挙型であります

アイデア?

+0

'array'の種類は何ですか? –

+0

@DejanSkledar配列は[String]型です。 –

+0

あなたの 'anotherArray'は何ですか? – Hamish

答えて

1

問題は、SomeEnum.values戻りタイプが[SomeEnum]で、Stringではないということです。

そして、append関数は、パラメータがStringであると予想しますが、代わりに[SomeEnum]です。

これは、あなたが変更するために必要なものです:

  1. 変更appendappendContentsOfに、あなたはそれを追加しているので、filter関数は、配列ではなく、単一の値
  2. 変更[String]から[SomeEnum]を返しますので、このような配列[String]

これは修正です:

array.appendContentsOf(SomeEnum.values.filter({ $0.rawValue == "SomeString" }).map({ $0.PickOne() })) 
+0

私のコードを編集しましたが、$ 0.rawValue == "Hey"と入力すると "Hey"が返されます。私は "値1"の場合の最初の値を返したいと思います。それは理にかなっていますか?エラーは修正された、tho! :D –

+0

さて、私はあなたの答えを編集しました。今はうまくいく。ありがとう!! :D –

関連する問題