新人奮闘記14

iOS 入門

あまり見慣れなかったSwiftのソースコードがあったので、まとめてみました。

位地情報の取得処理の実装時、ユーザーの認証ステータスをチェックするソースがありますが、初心者の自分的には、なんとなくしかわからなかったので、少しピックアップしたいと思います。

例えば、以下のようなソース

funtouki14_1

どこが、見慣れなかったかというと、上記89行目の、caseに続く.AuthorizedWhenInUseや
.NotDeterminedといった書き方です。ドットから始まっているので、理解するまではふんわりとドットの前にクラス名とか、そういった類のものがあって、省略しているのだろうと推測して、スルーしておりましたが。見かける頻度が高くなるにつれて、見逃せなくなりました。

結論からいうと、列挙型というものが関係しており、複数の値やメソッドをまとめた集合体です。

果物の集合の例を表します。

funtouki14-_2
上のように宣言し
Fruit.appleとして値にアクセスできますが、caseの後のappleやgreapは文字列だから、二重引用符で囲む必要があるんじゃないかと思いましたが、それはString型の事であり、試しに、
Fruit.apple.dynamicTypeと実行してみると、明らかにFruitと出力されます。Fruit型のappleプロパティを宣言したという意味になりました。

では実際の値はどうなるのかというところで、以下を試してみました。

Fruit.apple.hashValue
Fruit.apple.hashValue.dynamicType
 Fruit.lemon.hashValue
[結果]
0
Int.Type
2

以上の結果からcaseの後に宣言した、appleやgrapeはInt型で0から自動的に割りふられている事がわかりました。ちなみにhashValueというプロパティを使うことで、実際のappleやgrapeに割り振られている値にアクセスできます。

Fruit.appleでは、appleやgrape という変数を作っただけじゃないかということで、実際の中身が気になりますが、やはりそういった使い方がありました。それは以下のような宣言です。

funtouki14_3

先ほどとは違い、Stringを宣言し、各プロパティに文字列として値を挿入しています。

では、上記①、②、③と同じようにアクセスしてみます。
[結果]
0
Int.Type
2

希望としては、文字列のRedやYellow、型はIntではなく、明示的に型宣言したString.Typeとなって欲しかったのですが、アクセスの方法が違っていました。

結論的にはhashValueではなくrawValueでアクセスする。

Fruit.apple.rawValue
Fruit.apple.rawValue.dynamicType
③ Fruit.lemon.rawValue

[結果]

“Red”
 String.Type
“Purple”

これで、実際に値を取得する事ができました。ポイントとして、hashValueは名前の通りハッシュ値にアクセス、rawValueは生のデータとかいう意味でしょうか?※あくまでもイメージです。

※ ハッシュ値やrawValueについては割愛させていただきます。

では、初めに宣言したenum(型宣言なし)をrawValueでアクセスすると、どうなるか試してみましたが、コンパイルエラーとなりました。rawValueでアクセスするためには、型宣言が必須となる事がわかりました。

そして、略したアクセスの方法、.AuthorizedWhenInUseや.NotDeterminedは型推論によって省略する事ができます。

先ほどのコードで略してみます。

単純に var a = Fruit.apple
a = .apple

最上位の位地情報承認ステータスの場合はCLAuthorizationStatusという列挙型のプロパティで、AuthorizedWhenInUseやNotDeterminedという値を持っている事が理解できました。

試しにこれらを省略せずに書いてみます。

funtouki14_4

89行目、91行目が省略無しで記述した例です。
結果として、エラーは出ません。

話がそれてしまいましたが、列挙型の使いどころがまだわからないので、これから学習していきたいと思います。

まとめ

・ 列挙型のプロパティは宣言した型となる。

・ 列挙型のプロパティに割り振られている値はhashValueでアクセスする。

・ プロパティに直接アクセスする場合は、rawValueを使う。

・ ドットから始まるものは、列挙型のプロパティで列挙型の名前が省略されている。

・ 省略ができるのは型推論が行われているため。

 

 



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム