質問: sortedDic.map { $0.value } } ``` xcodeのバグかと思い、 cmd + shift + k cmd + shift + option + k xcode再起動を試して見たのですが、効果はありませんでした。 環境はxcode11.6, 11.5両方で試しました。 どなたか、ご教授お願いいたします。
回答: コメントを書いた後で気付いたのですが、タイトルに「辞書をkeyでソート」と明記してあり、回答として書ける事柄があるのでお示ししておきます。 まず、Swiftの`Dictionary`型の`sorted(by:)`のクロージャーは、(今回の場合)`((key: Int, value: CardItem), (key: Int, value: CardItem))`という引数を受け取れないといけません。引数が2つあり、両方とも`key`, `value`を含むタプルになります。 `sorted(by: <)`と言う呼び出しが成功するためには、このタプル間の比較 ``` (key: Int, value: CardItem) < (key: Int, value: CardItem) ``` が何らかの形で定義されていないといけません。 Swiftはタプルの要素の型によっては、そのようなタプル間の比較演算`<`を自動的に定義してくれるので、`sorted(by: <)`は、そのような場合にだけ成功します。今回の場合はそのような条件が成立していないのだと考えられます。 (本来は、成功しなくても「そんな演算は定義されていない」と言う意味のエラーメッセージを出すべきところです。時間が取れるならAppleのフィードバックアシスタントからバグ報告を送られると良いでしょう。) ただし、このご質問では「辞書をkeyでソート」したいわけですから、そもそも、key-value両方を含むタプル全体を比較するのは、本来やりたいこととは違うことをやっていることになります。(`key`の方が前にあるので、期待通りの結果にはなるでしょうが。) 「keyでソート」したいのであれば、明示的に`key`同士を比較するようにしてみてください。 ``` let sortedDic = data.sorted{ $0.key < $1.key } ``` これで、少なくともコンパイラが Illegal instruction: 4 で止まってしまうことはなくなると思います。