iOS, iPhone, Swift, 技術系

Swiftをもう一度勉強してみた#2

# はじめに

はい、タイトル通り「Swiftをもう一度勉強してみた」ということで、

昔はちょこっとだけ書いていたSwiftをもう一度書いて

iOSやOS X向けのアプリを趣味で作成しようと思って勉強します!

これは、その記録。

勉強にはSwiftの公式Document『The Swift Programming Language』を利用します。

現在2017年5月17日、Swift3.1の情報です。

(前回の記事を書いてからすぐに記事を書き始めたのですが、時間がなかったり、意外と量が多くてまだ書ききっていないところがあります。ご了承ください。 [Date:2017.05.17] )

 

# 今回のテーマ

さて、今回のテーマはまず「フローの制御」です!

SPONSORED LINK




# フローの制御に関して

さて、フローの制御をするには次のような方法があります。

条件分岐if文, switch文
ループ処理for-in文, for文, while文, repeat-while文

丸括弧()内は、条件分岐やループ文の条件式を記述する部分で使用します。
また、鉤括弧{}内には、条件を満たした時の処理内容を記述します。

では、例をとって使い方を確認しましょう。

例題
生徒5人のテストのスコアから平均点を導く。また、最高得点と最低得点をそれぞれ求めよ。

 

上記の例は平均点を浮動小数点の形で表現したかったので出力のところでDouble型に型変換を行って割り算を行っています。

今回は5人というのが明白だったので、5人と明記しましたが、人数が分からない時は、配列の中の要素数を教えてくれるcountを使うと人数が変化しても対応可能です。今回は、そこがメインではないので書きませんが。

(参考:Swiftで配列の要素数(Count)を取得する方法


# if文

C/C++では以下のように書けるのが、

Swiftでは次のように書くと怒られます。

エラーとしては次のように書かれていました。

error: 'Int' is not convertible to 'Bool'
if (score) {
   ~^~~~~~

エラー内容としては、Int型はBool型に変換できないという意味ですが、これはif文の条件式として、scoreが暗黙的に0かどうかを比較することはしないということを示しているとのことです。


また、if文にlet を使うとミスを防ぐことができます。型の宣言をする際にクエッションマーク(?)をその値のオプションとして後ろにつけることでnil (空の状態)を検知することができるようになります。以下がその例です。

 

また、クエッションマークを2つ(??)使うことで、次のように書くこともできるみたいです。

この出力結果は次のようになります。

Hi Sam

ちゃんと、nick_nameが空であることを感知して、full_nameの方を出力してくれます!

これは便利だなぁ。


# switch文

“Switches support any kind of data and a wide variety of comparison operations—they aren’t limited to integers and tests for equality.”

抜粋:: Apple Inc. “The Swift Programming Language (Swift 3.1)”.

これを読むと、SwiftのSwitch文はあらゆる種類のデータとさまざまな比較操作をサポートしているみたいです。(ちなみに、C/C++ではSwitch文は整数値しか扱えない。)

このプログラムは「The Swift Programming Language (Swift 3.1)」に書かれているサンプルコードなのです。このコードの結果は次のようになります。

Is it a spicy red pepper?

この文の該当箇所は下記の部分です。

ここで、hasSuffixという関数が登場していますが、これは文字列の後方比較を行う関数です。本関数については参考サイトを以下に示しますのでそちらをご覧ください。

ちなみに、このhasSuffixという関数はObjective-Cの頃からある関数みたいです。

(参考:NSString – iPhoneアプリ開発の虎の巻)

※このサイト(NSString – iPhoneアプリ開発の虎の巻)は昔iPhoneアプリを開発していた時に、よくお世話になっていました…懐かしい。

 

さて、switchの話題に戻ります。Swiftのswitch文の概要が説明されているところにAppleからこんな一文が書かれています。

“Try removing the default case. What error do you get?”

抜粋:: Apple Inc. “The Swift Programming Language (Swift 3.1)”。

(意訳)「defaultのケースを削除してみろ。さぁ、どういうエラーが出力された?」

なんだこのノリは…これがAppleの余裕か( #゚д゚)!!

っと変なツッコミを頭の中で想像しながら

defaultケースをコメントアウトした結果がこちら。

Switch must be exhaustive, consider adding a default clause

…はぁ、そうですか( ´・д・)
網羅性ねぇ。でも、default不要な時もあるしなぁ…。
いまいち、このメリットが見えないなぁ…。

っと思ったのですが、ちょっとこのエラー内容でGoogle先生に聞いたら、この網羅性のありがたさが書いてある記事がすぐに見つかりました!それがこちら↓
Swiftの列挙型、switch文、網羅性チェックが素晴らしい!

上記の記事ではenumを使った時に、要素を網羅できていなかった時それを知る手段として活用できるんだ!素晴らしい!っという旨味を説明してくれていました。

(旨味を少しでも知りたければ上記のサイトの記事を読むと分かると思います。)

 

ただ、網羅したくない時にも怒られるのはちょっとなぁっと思います…

まぁ、仕様だから仕方ないのですが。そういうならif文で書けよ、もしくはクラスでそうゆう機能を持たせればいいだろうっと言われそう。

 


# for-in文

(今後時間がある時に書き足します!)


# while文

(今後時間がある時に書き足します!)

 

【改定履歴】


【追記】


MY SNS ACCOUNT

Instagram :  @programer_fumi

Twitter: @PROVINSITE

Twitter:@FumiProgrammer

もしよければフォローとイイネしてください♪

喜びます(〃艸〃)←

SPONSORED LINK



この記事が気に入ったら
いいね ! しよう

Tagged , , , , , , , ,

About Fumi

FUMISITEの管理人。 職業は、プログラマー兼システムエンジニア。趣味は、プログラミング・散歩・スナップ写真撮影・美術鑑賞・映画鑑賞・読書など。
View all posts by Fumi →

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です