こんにちは!Apple信者のiOSエンジニアです。
この記事では、iOSアプリ開発のメイン言語ともいえるSwift(スイフト)についてご紹介していきます。
比較的新しいプログラミング言語でありながら、Apple製品の普及に伴い急速にシェアを広げているSwift。
iOSエンジニアにとって欠かせないSwiftとは、一体どのような言語なんでしょうか?
この記事では実際のソースコードを交えながら、Swiftの特徴や基本文法についてご紹介をしていきたいと思いますよ。
Swiftとは
Swiftとは2014年のWWDC(世界開発者会議)でAppleが発表した、様々なApple製デバイスで動くアプリケーションを作成するためのプログラミング言語です。
現在では、iOSアプリ開発者の多くがこのSwiftを使って開発を行っています。
またmacOSやtvOSなど、iOS以外のアプリケーションもSwiftで作れるため、Apple製品が世界に広まれば広まるほど、Swiftの需要も高まっていく。
これは開発者にとってもAppleにとっても、とても好循環といえるでしょう。
もともとiOSアプリ開発にはObjective-Cというプログラミング言語が採用されていましたが、かなり記法が複雑であり、学習コストの高い言語でした。
AppStoreが波に乗り、より多くのiPhoneアプリ開発者に出てきてほしいと考えたAppleは、低い学習コストで誰もが手軽に学べるSwiftを開発したというわけです。
AppleのSwift開発のリーダーとして活躍したのが、エンジニアとして勤務していたクリス・ラトナー氏。SwiftだけではなくiOSアプリ開発に欠かせない統合開発環境のXcodeや、Swiftの学習アプリSwift Playgroundsの開発にも携わっていた方だそう。
またラトナー氏によれば、Swiftを開発するにあたり、Objective-CやRuby、PythonやC#などの様々な言語からアイデアを得たのだそう。多くの言語の良い部分を取り入れることで、初学者や多言語の習得者にも優しい言語へとブラッシュアップされたんですね。
Swiftの特徴
Appleが発表したSwiftの特徴として、次の4つが上げられています。
モダン
昔からあるレジェンドの言語にはない、新しい言語だからこその機能がSwiftには盛り込まれています。
詳しくは後述しますが、NULL型を扱うために独自のオプショナル型という概念があったり、無名関数を少ないコード量で扱えるクロージャという仕組みがあったりと、かなり洗練された言語です。
安全
「プログラミングが実行されてからでなければエラーになるかどうかわからない」という箇所を徹底的になくし、エラーを見つけやすくしているのもSwiftの特徴の一つ。
代表的なものでいえば、意図せずNULL値が入り込むことを防ぐオプショナル型や、記述の時点でオブジェクトの型をチェックするなど、クラッシュを早期の段階で未然に防ぐ安全な言語だといえます。
高速
実行時のスピードが早いことも、Swiftのもつ特徴。
これは体感するのが難しいかもしれませんが、アプリが大規模なものになればなるほど記述されているソースは増えるでしょうし、実行速度は重要になりますよね。
インタラクティブ
インタラクティブというのは、「双方向」や「対話的な〜」という意味を持ちます。
その言葉どおり、コンピュータと対話をするように、リアルタイムで挙動や状況の確認ができます。
たとえばXcodeのデバッガを使えば、入力中にも文法エラーを発見できますし、Playgroundsではコードを記入すると即座にコンパイルが始まり、実行結果がすぐにわかるというメリットがあります。
SwiftとObjective-Cの違い
Swiftは、Appleによって作られた言語です。
なのでApple製品やプラットフォームがブラッシュアップされるたびに、Swiftの言語仕様も進化していきます。
ちなみに、2022年1月でのSwiftの最新バージョンはv5.5。
一方でObjective-Cは、1984年にブラッド・コックス氏によって作られたプログラミング言語。こちらは完成された言語であり、最新バージョンはv2.0にて止まっています。
SwiftはAppleとともに成長をしていくのに対して、Objective-Cは据え置き。
一見すると新しいほうが良いように見えますが、あまり頻繁に言語仕様が変更されてしまうのも考えものですよね。
実際に、Swiftが出始めの頃には、度重なるアップデートで開発者の方が振り回されたという経験も。
しかし、心配には及びません。現時点ではSwiftはある程度安定しており、全てが変わってしまうような言語の仕様変更は滅多にありません。
2022年からiOSエンジニアを目指すならSwiftを学ぶべき?
今からiOSエンジニアになるための勉強を始めるとすれば、僕個人としてはSwift一択だと考えています。
もちろん、Objective-Cも扱えるに越したことはありません。
古くからあるiOSアプリはObjective-Cで書かれていますし、iOSアプリのリプレース案件ならばObjective-Cを扱う場面もあるでしょう。
ただ実際にいくつかのiOSアプリ開発に携わってきた中で、積極的にObjective-Cを使いたいという開発案件は少ないように思います。
特に新規開発のプロジェクトにおいてはSwiftが選択されることが大半。
僕の経験からお伝えすれば、なおかつ伝統あるアプリも、メンテンスコストの面から、Swiftへの移行が進められている印象です。
Swiftの将来性は?
Swiftの将来性については、多くの意見が飛び交っていますよね。
たしかにApple製品に依存するSwiftは言語として少々特殊ですし、他のプログラミング言語に比べて将来性が気になるという声が多いのもうなずけます。
僕としては、Swiftの将来性は安定的だと楽観視しています。
Swiftの将来性=Appleの将来性といえますし、Appleは今や世界最大規模の企業。
数十年後にAppleやSwiftがどうなっているかはさすがにわかりませんが、現時点の業績や企業価値からして、Appleが数年後に突然どうこうなってしまうことは考えにくいでしょう。
Apple信者としても、何度も苦境を乗り越え不死鳥のように蘇ってきたAppleを知っていますし、おこがましいですがいちファンとして誇りに思っています。またiPhoneをはじめとした革新的な製品を発表するたびに、世間からの「そんなものは売れない」「失敗するに決まっている」という声を覆し続けてきたのがAppleという企業です。
そのため僕個人としては、現時点でSwiftの将来性についてあれこれと考えて心配するのは杞憂だと感じますよ。
Swiftのおすすめの勉強法
Swiftを学ぶために僕がおすすめしたいのは、書籍学習です。
たしかに、はじめから書籍で学び始めるのは効率が良くないという意見もありますよね。
動画教材のほうがすぐに手元で学習を始められますし、今はそういった学習動画もオンラインのプログラミングスクールも多くあります。
しかし書籍には、わからなかったところを何度でも読み直し、理解したことを書き込めるという大きなメリットがあります。
新しく知ったことを自分なりの言葉に置き換えていくことは、僕の経験上とても効率よく学べる方法の一つ。
さらにSwift関連の書籍は近年かなり充実していて、Xcodeでのアプリ開発を軸に効率よく学べるものが増えています。
一冊の本を2、3周ほど読んでなんとなくでも理解できたら、理解できなかった部分を徹底的に調べて考えて解決する。解決したら、自分の言葉で書き込んでおく。
基本的なところを抑えたら、あとは自分の作りたいアプリをガシガシ作っていくだけです。
作りたいものがあればそれがモチベーションになりますし、やりたいことを実現するためには嫌でも新しいことを調べたり覚えたりしなければいけませんからね。
僕の経験上、こうした自己学習の繰り返しによって、Swiftの知識がバランス良くついていくと感じました。
Swiftの基本文法一覧
さて、それではここからはSwiftの基本文法について解説していきましょう。
変数・定数
まずは、変数と定数についてです。
Swiftで、文字列型・数値型・浮動小数点型の変数・定数に値を代入するには以下のようにします。
// 変数に文字列の値を代入
var hogeString: String = "こんにちは"
// 定数に数値型の値を代入
let hogeInt: Int = 123
// 定数に浮動小数点型の値を代入
let hogeFloat: Float = 3.14
// 定数に値を代入(型推論でInt型として代入される)
let hogeInt = 123
Swiftでは、変数や定数のあとに「:」をつけて型名を表記します。
またSwiftには型推論(=「これはこんな型かな?」と推測してくれる機能)が働きますので、最後の例のように型名を明記せずとも適切な型に変換して代入されるわけですね。
しかし一つ気をつけなければならないのは、数値です。
なぜなら数値型に関しては、小数点以下がある数値でもXcodeの中では様々な型で扱われているから。
たとえば同じ「1.2」という数値でも、CGFloat型とDouble型とFloat型では扱い方が異なるので、後々のコーディングで小数点以下の数値を使う場合には注意しましょう。
関数
Swiftでの関数の記法は、以下の通りとなります。
例として、以下に引数や戻り値のありなしでいくつか関数を示します。
// 引数なし・戻り値ありの関数の宣言
func printString() {
print("こんにちは")
}
printString() // 実行
// 引数あり・戻り値なしの関数の宣言
func printString(str: String) {
print(str)
}
printString(str: "こんにちは") // 実行
// 引数あり・戻り値ありの関数の宣言
func getHelloString(str: String) -> String {
let helloString = "Hello," + str
return helloString
}
let helloStr = getHelloString(str: "Swift") // 実行
Swiftの関数では、戻り値の「型」を「->」のあとに記述します。
また戻り値を指定した場合には、関数のスコープ内で「return句」を使って生成後の値を戻してあげるのがポイントです。
条件分岐
Swiftの条件分岐として代表的な2つを以下に紹介します。
// 変数の宣言
var a = 2
// if文による条件分岐
if a >= 3 {
print("aは3以上")
} else {
print("aは3より小さい") // ここが実行される
}
// switch文による条件分岐
switch a {
case 1: print("aは1")
case 2: print("aは2") // ここが実行される
case 3: print("aは2")
case 4: print("aは2")
default: break
}
1つ目は、if文です。今回の例では、aが3以上だったときにif文のスコープ内の処理が実行されるようになっています。
それ以外の場合には、else句のスコープが実行されることになります。
もう一つはswitch文です。
これは、複数の条件が想定される場合に決め打ちで処理を行うときに便利な記法となっています。
またdefault:は、いずれの場合にも当てはまらなかったときに実行される処理を書きます。
breakと記すと、このswitch文では何もせずに次の処理に移ります。
ループ処理
プログラミング言語の中で欠かせない、ループ処理についてもご紹介。Swiftでは主にfor文が用いられます。
// 配列を用意
let arr: [String] = ["あ", "い", "う", "え", "お"]
// 一つずつ取り出してコンソールに出力
for str in arr {
print(str)
}
上の例では、用意した配列arrに含まれる文字列を一つずつコンソールに出力しています。
for [変数] in [配列や範囲] という記法で、要素を一つずつ処理することができるわけです。
さいごに
この記事では、Appleが作ったプログラミング言語・Swiftについて紹介してきました。
iOSアプリ開発者にとって、Swiftは切っても切れない特別なプログラミング言語。
これからiOSアプリ開発を学ばれる方には、Swiftの習得を強くおすすめします。
プログラミングに触れたことがない方でも、Swiftはとてもシンプルな言語ですし、勉強できる環境もたくさん揃っていますから、きっと楽しみながら学習していけるはずですよ!
よろしければ今すぐにでもMacを開いて、SwiftでのiOS開発を楽しんでみてくださいね!