2016-12-09 1 views
0

私はこのコードをnsdictionaryのトップ値を取得し、NSdictionariesの配列に追加します。速報3に変換した後にエラーが表示されます。Swift 3.0でkeysSortedByValueを使用するにはどうすればよいですか?

self.array = (self.dict!).keysSortedByValue 
         (comparator: { 
          ($1).compare($0) 
        }) 

曖昧な参照エラーが発生します。それはコンパレータの形式に問題があるようだが、私はそれを変更する方法がわからない..誰も知っている?

+0

「self.array」のタイプとは何ですか? –

+0

申し訳ありません、それはnsdictionariesの配列です –

+0

私はこのアプリを迅速に3にアップデートしています。さらに多くのコードが添付されています。これが最後のエラーです。たくさんのものを書き直す –

答えて

0

コンパイラは、関数タイプが(Any, Any)で、compareを使用できないため、おそらく$ 0と$ 1を推論できません。だから、私はスウィフト辞書を好むスウィフトを使用している場合はAny

let dict: NSDictionary = ["3" : "Orange", "1" : "Apple", "2" : "Pear"] 
let keys = dict.keysSortedByValue(comparator: { (key1: String, key2: String) in 
    return key1.compare(key2) 
} as! (Any, Any) -> ComparisonResult) 
print(keys) 

に出Stringに戻った後(または任意のタイプのあなたはそれがcompareに準拠して使用している)と、それらをキャストする必要があります。

​​3210
+0

最初の部分は動作しませんが、もっと簡単に見えるので、私は正規の辞書を使用しようとしています –

+0

値でソートするにはどうすればいいですか?元のコードは –

+0

でした。私は誤解して、2番目の部分を編集しました。 – Frankie

0

これが最終的に動作したのです。私はそれがNSDictionaryで働くことができなかったので、フランキーのアドバイスを受けて、ちょうど普通の辞書を使用しました。次に、このコードを使用してソートし、配列に追加します。

self.dict = snapshot.value as? Dictionary 
let sorted = self.dict.flatMap({$0})?.sorted { $0.0.1 > $0.1.1 } 
for (name, value) in sorted! { 
    self.array.append(name) 
} 
関連する問題