Loading
BLOG 開発者ブログ

2023年9月25日

swift-collectionsのOrderedDictionaryを使ってみた

目次

 

はじめに

こんにちは、クラウドソリューショングループのtakinami.sです。

前回私が作成した記事の中で『Dictionary型のままUITableVIewCellに表示させようとすると順番が保証されずバラバラで表示されてしまう』と記述しました。

今回はswift-collectionsを使用して、Dictionary型でも順番が保証されたものを作成するとどのように変わってくるのかを見ていこうと思います。

 

動作確認環境

Xcode 14.3.1

Swift v5.8.1

swift-collections v1.0.4

 

動かしてみた

デフォルトのDictionary型の場合の動作

まず比較としてデフォルトのDictionary型でどのような動きをするのか簡単に見ていきましょう。

let fruits = [
  “apple”: “red”,
  “banana”: “yellow”,
  “lime”: “green”,
  “orange”: “orange”,
  “peach”: “pink”
]

print(fruits)

フルーツの名前とそこから連想される色をまとめたDictionary型のデータを記述し、それをコンソールの出力されるだけの簡単なコードです。

見ていただくとわかるように、元になるデータはフルーツの名前がアルファベット順になるようにしています。

では、これをコンソールに出力してみるとどうでしょうか。

出力結果1回目

アルファベット順に記述したはずなのに、順番がバラバラになってしまいました。

気を取り直してもう1度…

出力結果2回目

記述した順番とも先ほど出力した結果とも違う順番になってしまいました。

これがDictionary型の特徴で、順番が保証されていない状態になります。

 

swift-collectionsを追加する

今回はSwift Package Manager(SwiftPM)を使ってインポートしていきます。

画面上部のメニューから『File > Add Packages…』を選択します。

Add Packeges

 

次に追加したいライブラリを選択します。

今回使いたいswift-collectionsはApple純正ライブラリなので、GitHubのURLを指定しなくても一覧に表示されていました。

対象のライブラリを選択したら、右下の『Add Packege』を押します。

swift-collections

 

さらに、今回使用したいOrderedCollectionsにチェックを入れて、『Add Package』から追加します。

OrderedCollections

 

Dictionary型のデータを作成する

先ほど作ったフルーツのデータを今度はOrderedDictionary型を指定してみます。

コードは以下の通りです。

SwiftPMを使用する都合上ViewControllerで記述していますが、やることはデフォルトのDictionary型の動作確認と同じです。

import UIKit
import OrderedCollections // 使用したいライブラリをインポート

class ViewController: UIViewController {  
  override func viewDidLoad() {
    super.viewDidLoad()    
    let fruits: OrderedDictionary = [ // 元データを作るときにOrderedDictionary型を指定
      “apple”: “red”,
      “banana”: “yellow”,
      “lime”: “green”,
      “orange”: “orange”,
      “peach”: “pink”
    ]   

  print(fruits)
  }
}

 

表示させてみる

では、コンソールに出力してみましょう。

OrderedDictionary出力1回目

今度は記述した通りのアルファベット順で並んでいますね!

念の為、もう1度出力して確認してみましょう

OrderedDictionary出力2回目

今度も問題なさそうです。

 

最後に

UITableViewを使うときなどDictionary型を使用したいケースは多々あるかと思います。

しかし、順番が保証されていないため配列に直すという手間がかかっていました。

今回使用したswift-collectionsによってそうした手間が省けるのは大きいですね。

ただライブラリを使用するので、定期的にアップデートされていないかなどメンテナンスは行うように注意しましょう。

 

takinamisのブログ