Dance with Tech

プログラミングとか学んだことの備忘録ブログです。

【Swift入門】ディクショナリから値を取り出すときに順番がバラバラになって驚いた

iOSアプリを仕事で作ることになったのでSwiftを始めました。

その中で、勉強したことと少し驚いたことをメモしていきます。

タイトルの件は中盤辺りに書いています。

f:id:kmatz90:20150521221920p:plain

ちなみに僕は、Objective-Cを2年位前に本1冊終わらせたくらいで、

iOSアプリに関しての知見は殆どありません。

 

変数・定数・配列・ディクショナリ(連想配列)の宣言と初期化

上記ではそれぞれの型を指定して宣言・代入をしていますが、

型の指定は省略することができます。

var variable = 10  //Int型になる

省略した場合、自動で型を推測して実装してくれます(型推論)。

Objective-Cではできなかった模様

 

ループと配列・ディクショナリの操作

一般的で分かりやすいですね。

forの条件式の部分に()を付けることもできます。

 

驚いたこと

これが本題です。

上記のような方法でディクショナリから値(キー)を取り出すと、

1,青木さん

2,佐藤さん

3,鈴木さん

ではなく、

2,佐藤さん

3,鈴木さん

1,青木さん

のように、

初期化していた順番とバラバラになって出力されたりします

※順番通りに表示されることもあります。 

これはSwiftの仕様のようで、

 Unlike items in an array, items in a dictionary do not have a specified order.

訳:配列内の項目とは異なり、ディクショナリの項目は指定された順序を持っていません。

公式ドキュメントに記載されています。

知らなくて、何とかしようと頑張ってしまった。。

 

関数(func)

Swiftの関数は「function」ではなく「func」と表現し、

戻り値を返す場合「->」を使って型を指定します。

また、引数に初期値を設定することもできます。

 

タプル(tuple) 

タプルとは、複数の値(型が違くてもok)を1つにまとめられるものです。

配列とはまたニュアンスが違います

実際にコードを見た方が分かりやすいです↓

便利そうですが、後から要素を追加したり削除したりはできないようです。

 

Swiftの暗黙のルールとか空気感

ここまで変数の宣言を「var」で行ってきたのですが、

基本的には「let」を使って定数にし、

変数が必要な部分のみで「var」を使うってスタンスが良いみたいです。

 

あと、変数の宣言で使う型の指定ですが、

基本的には省略しちゃって良いような空気をググってて感じました。

確かにXcodeが変換してくれるとはいえ、

いちいち「String」とかタイプするの面倒。。

この辺りは賛否両論ありそうですが、

ベターな書き方が分からないので、しばらくは他人が書いたコードを読んで修行あるのみです。

 

今後も覚えたことや、気づいたことなどをメモしていこうと思うので、

興味のある方はまた来てください。