【初心者向け】Swiftでアプリ開発をする7つのステップ
みなさんはSwiftの学習をしようと思っていませんか?
Swiftは3年前にできた言語で需要が増えているため、学習するのにおすすめの言語のひとつです。
今回の記事では、初心者の方に向けて、Swiftのアプリ開発をするステップを紹介していきます。
基本構文や定義を確認後、アプリ開発しながらの学習の流れをご紹介します。
①Swift(スイフト)を知る
Swiftとは、iPhoneアプリを開発するためのプログラミング言語です。
2014年6月に開催されたアップルの開発者向けコンファレンスで突如発表され、まだできて3年の新しい言語です。
Swiftの特徴:Objectiv-Cに比べてわかりやすい
今まで、Mac OS XやiOS(iPhoneやiPad)のアプリ開発には、「Objective-C(オブジェクティブシー)」と呼ばれるプログラミング言語が使われてきました。
Mac OS X(そして、これをベースに作られたiOS)は、Objective-Cのために用意されたフレームワークが内部に用意されており、これを利用してすべてのプログラムが動いています。ただ、この言語は非常にわかりにくい言語なのです。
これはC言語に、Smalltalkというオブジェクト指向言語の元祖とも言えるものを合体させたような言語で、1つの言語の中に2つの言語の文法が同居しているような不可思議な文法となっていました。つまりわかりにくい文法なのです。
C言語のもう一つのオブジェクト言語発展形であるC++や、これに文法の近いJava、C#といった言語が主流となるにつれ、これらから外れたObjective-Cは「普通の言語と違う、とっつきにくい言語」となっていったのです。
スマホブームで間口を広げるために開発された言語
iPhoneがブームとなり、多くの開発者がこれらのアプリを作ろうと集まってきました。
しかし、「Objective-Cがわかりにくい」ので、なかなか開発が進みません。
そこで、Objective-Cとは異なる、新しい「とっつきやすくわかりやすい使いやすい言語」の登場となったのです。
それが「Swift」です。
「独学でのプログラミング学習に苦戦していませんか?」
独学でのプログラミング学習の挫折率は9割以上と言われています。
✔プログラミングを身につけて、年収をUPさせたい
✔ITエンジニアになって、働き方を変えたい
✔生活を変えたいけど、何からやればよいか分からない
と思っているあなたへ向けて、
挫折率9割に負けない「プログラミング学習必勝法」を無料でプレゼントします!
完全無料なので、悩む前に今すぐ下のバナーをクリックして資料を読んでみてください!
\簡単30秒/
下のバナーからLINE友だち追加をして、無料で限定資料をGET!
②Swiftの基本を学ぶ
アプリ開発といっても、ソースの大半は基本的なものの集まりです。
これらのもっとも基本的なものからしっかり頭に入れていきましょう。
更に追求した深い内容については、ご自身で都度確認してみてください。
リテラル(値)について
ソースコード内に直接記述される値を一般に「リテラル」と呼びます。
リテラルの書き方は、多くのプログラミング言語で共通していることが多いです。
数値リテラル
数値は、ごく普通に数字を書くだけです。「123」とか「0.45」といった具合です。
さらに、普通の数字の書き方だけでなく、ちょっと変わった書き方もできます。
4桁ごとにアンダースコア
数字は、桁数が多くなると可読性が落ちます。
そこで一般社会では、例えば「1,000,000」みたいに、4桁ごとに区切り文字をつけて記述したりします。
これと同じことをSwiftでも行えます。
記号はカンマではなく、アンダースコア(_)になります。
また、桁数を揃えて見せるために、冒頭にゼロをつけて書くこともできます。
例) 0012_3456_7890 (1234567890 と同じ)
2, 8, 16進数
通常の10進数の他に、2進数、8進数、16進数の値も記述できます。
これらは、それぞれ数字の冒頭に「ゼロ」で始まる記号を以下のようにつけます。
※進数自体の説明は行いませんので忘れた方は調べてください。
8進数――「0o」(2文字目はアルファベットのオー)を冒頭につけて記述(0o7623 など)
16進数――「0x」を冒頭につけて記述。値は0~9とA~Fを使って書く(0x5fa3 など)
テキストリテラル
テキストは、値の両端をダブルクォート(”)でくくって記述します。
これも多くの言語でよく使われている仕様です。
例) “Hello” “こんにちは”
エスケープ記号
テキストリテラルには、直接文字として記述できない記号があります。
例えば、ダブルクォートは囲むために使っているのでそのままは書けません。
また改行コードのような制御記号も書けません。
これらは、エスケープ記号であるバックスラッシュ記号を付けて記述します。
\\――バックスラッシュ(\)記号
\t――水平タブ記号
\r――キャリッジリターン
\n――ラインフィード
\0――ヌル文字
例) “これは\”ダブル\\クォート\”記号\n”
変数の埋め込み
リテラル内には、変数を埋め込むことができます。
これは、\(変数)といった形で記述します。
例えば変数strをリテラル内に埋め込むならこんな漢字に記述できます。
例) “ここに\(str)と表示する”
真偽値
二者択一の状態を示すのに用いるのが真偽値です。
真偽値は、「true」「false」がリテラルとして用意されています。
これらを直接記述して使います。
変数について
変数は、あらかじめ宣言をしてから利用をします。
宣言をせずに使ったり、あるいは既に宣言した変数を再度宣言したりするとエラーになります。
変数の宣言は以下のように記述します。
var 変数 :タイプ = 値
「最初に値を代入しないでおきたい」という場合は、こんな具合に書くこともできます。
var 変数: タイプ
定数について
変数は一般に値の変更が可能ですが、「後で変更できないようにしたい」という場合には、定数を使うことができます。
これは以下のように記述します。
let 定数 : タイプ = 値
定数は、基本的に値の代入と宣言をセットで記述します。宣言だけしておき、後で値を代入することはできません。
宣言時に代入された値が定数の値となり、以後、変更することはできません。
変数のタイプについて
変数(定数)の宣言をするときには、変数名だけでなく、タイプ(型)を指定します。
Swiftの変数は、基本的に全て型が決まっています。変数を作成する際に、必ず型を指定しなければいけません。
ではなぜ「var 変数 = 値」といった書き方もできるのか?というと、代入する値から型を推測して設定するからです。
(そのため「var 変数」だけだとエラーになります)
Swiftは、基本的に「静的型付け」の言語なのです。
すべての変数は、最初に必ず型を指定し、その型の値しか代入できません。
型の種類
Swiftには、多数の方が用意されています。主な型についてここで整理しておきましょう。
UInt ===> Intと同じですが、こちらはプラスマイナスの符号がありません(つまりマイナスが使えません)。
Float ===> 32bit幅の浮動小数値です。
Double ===> 64bit幅の浮動小数です。
String ===> 一般的なテキストです。
Character ===> 1文字だけのテキストです。
Bool ===> いわゆる真偽値です。
これらはいわば基本型ともいえるもので、この他にもSwiftで値の型として利用されるものはたくさんあります。
配列やオブジェクト、「タプル」「オプショナル」といった値などです。
演算の基本について
数値演算
数値演算の基本である四則演算は、極普通の演算子を使って行えます。
A – B ===> AからBを減算(引き算)します。
A * B ===> AとBを乗算(掛け算)します。
A / B ===> AをBで除算(割り算)します。
A % B ===> AをBで割った余りを計算します。
この他、()による演算の優先順位の指定などももちろんできます。
テキスト演算
テキストの演算は、+記号によるテキストの連結がサポートされています。
“Hello” + “Swift”とすれば、”HelloSwift”というテキストが得られます。
代入演算子
値の代入は、イコール記号(=)によって行います。
これにより右辺の値を左辺の変数などに代入します。
他、四則演算と代入を同時に行うものとして以下のような演算子が用意されています。
A -= B ===> AからBを減算する。 (A = A – B と同じ)
A *= B ===> AにBを乗算する。 (A = A * B と同じ)
A /= B ===> AをBで除算する。 (A = A / B と同じ)
A %= B ===> AをBで除算した余りをAに代入する。(A = A % B と同じ)
インクリメント/デクリメント演算子
変数の値を1増やしたり1減らしたりするためのものです。
これは以下のものが用意されています。
–A , A– ===> Aの値を1減らします。
変数の前につける場合と後につける場合がありますが、これは値の評価と書き換えのタイミングの違いです。
++Aの場合、値を1増やしてからAの値を取得します。つまり、得られる値は1増えたものです。
これに対し、A++はAを取得した後に値を1増やします。つまり、Aの値は1増える前のものでそれが使われた後で値は変更されます。
比較演算子
制御構文の条件などに多用されるものですね。
「AとBは等しい」とか「AはBより大きい」といった具合に、2つの値を比較し、それが正しければtrue、そうでなければfalseを返す演算子です。
A != B ===> AとBは等しくない
A < B ===> AはBより小さい
A <= B ===> AはBと等しいか小さい
A > B ===> AはBより大きい
A >= B ===> AはBと等しいか大きい
論理演算子
真偽値の値によって真偽値の値を返すものです。
構文の条件として複数の比較演算の式を組み合わせて設定したりするのに用いられます。
A || B ===> 「OR演算」 です。AとBのどちらか一方でもtrueならばtrue。両方共にfalseの場合のみfalseとなります。
A ^ B ===> 「XOR演算」です。AとBが異なる値ならtrue、同じ値ならfalseとなります。
!A ===> 「NOT演算」です。Aがtrueならばfalse、falseならばtrueとなります。
if文による条件分岐
これは条件に応じて実行する処理を設定するものです。
このif文は、以下のように記述します。
ifの基本形(1)
……条件が正しい時の処理……
}
ifの基本形(2)
……条件が正しい時の処理……
} else {
……正しくない時の処理……
}
条件カッコは不要
他の言語の経験があると、つい「条件はカッコで括る」と思ってしまいますが、Swiftの場合はカッコは不要です。
もちろん、つけてもかまいません。
OK: if x == 0 {……}
ただし、条件の後に実行する処理や、elseの後で実行する処理部分は、必ず{}記号で括る必要があります。
他の言語では、1文だけしか処理が用意されない場合は{}を省略することができたりしますが、Swiftでは必ず{}が必要です。
国内最大級のプログラミングスクール【DMM WEBCAMP】
手厚いキャリアサポートと高品質の学習カリキュラムで驚異の転職成功率98%!
あなたも、IT業界で輝くエンジニアになりませんか?
本気で人生を変えたい方は、ぜひ無料カウンセリングへ!
\参加者満足度99%/
エンジニア転職のプロに無料で相談する!
※最短1分で申し込み可能
else ifについて
条件が成立しない場合、elseにifをつけて「else if」として次の条件文を続けて書くことができます。こんな具合です。
……処理……
} else if 条件 {
……処理……
} else if
……必要なだけ続けて書ける……
}
この場合も、else ifが成立しなければelseをつけたり、更にelse ifで次の条件を設定したりすることができます。
switch文による複数分岐
ifは真偽値で条件をチェックするため、二者択一の形でしか処理を分岐できません。
値を調べて多数の分岐を行えるようにするのが「switch」文です。
これは以下のように記述します。
switch文の基本
switch チェックする値 {
case 値:
……実行する処理……
case 値 , 値 , ……:
……実行する処理……
default:
……その他の場合の処理……
}
チェックする値
switchは、その後にチェックする値を記述します。
これは、値、変数、式など、値として扱えるものであれば何でも設定できます。
この値の部分も、カッコは不要です(つけてもかまいません)。
値は、数字、テキスト、真偽値どれも利用することができます。
caseについて
caseには、値を記述します。これにより、switchに用意した値がcaseの値に一致すればそこにある処理が実行されるようになります。
このcaseには、値は複数設定できます。この場合は、カンマで値を続けて記述します。
多くの言語では、caseで実行する処理の最後に構文を抜けるための命令を用意しますがswiftは不要です。
swiftでは、caseにある処理をすべて実行すると、次のcaseの前で自動的に構文を抜けるようになっています。
defaultについて
switchの最後には、必ずdefault:を用意します。
これは、すべてのcaseに一致するものがなかった場合の処理です。
多くの言語ではこれはオプションですが、swiftの場合は必ず用意するのが基本です。
for文による繰り返し
繰り返しにもいくつかの構文が用意されています。
もっともよく使われるのは「for」というものです。
for inの基本形
……繰り返す処理……
}
これは、配列やrangeのように複数の値をまとめて扱うものを利用した繰り返しです。
forの後に変数名を用意し、inの後に配列やrangeの値を記述します。
その後の{}内に繰り返す処理を用意します。
forの基本形
……繰り返す処理……
}
これは、より細かく繰り返しを設定したいような場合に利用するものです。
forの後には、初期化処理、条件、後処理の3つの要素を用意します。
条件 ===> 繰り返しを行う度に、この条件をチェックします。trueならば繰り返しを行い、falseならば構文を抜けて次に進みます。
後処理 ===> 繰り返し処理を実行後、ここに用意した処理を実行してから次の繰り返しへと進みます。
大抵の場合、初期化で変数を初期化し、後処理でその値を増減させて繰り返しを行わせるような使い方をします。
例えばこんな感じです。
“index:” + String(i)
}
whileによる繰り返し
forは繰り返しごとに変化するような仕組みを構文の中に持っています。
が、もっと単純に「条件をチェックして繰り返すかどうか決めるだけ」というシンプルな繰り返し構文もあります。
それがwhile文です。
whileは、条件のつく場所によって異なる2つの書き方があります(後者はdo while文といわれたりします)。
whileの基本形
……繰り返す処理……
}
do whileの基本形
do {
……繰り返す処理……
} while 条件となるもの
whileの後に条件となるものを用意します。
この条件がtrueであれば繰り返しを実行し、falseになれば繰り返しを抜ける、という単純なものです。
単純でありながら、なぜ2つの書き方があるのか。それは、条件をチェックするタイミングの違いです。
前者(構文の最初にwhileがあるもの)は、まずwhileのあとにある条件をチェックし、それがtrueならば以下の{}部分を実行します。
後者(構文の最後にwhileがあるもの)は、繰り返し行う{}の部分をまず実行し、終わってからwhileの条件をチェックします。
ということは、最初から条件がfalseであったとしても、必ず1度は{}部分を実行してしまう、ということになります。
クラスの定義
Swiftは、オブジェクト指向言語です。ということは、もちろんオブジェクトを扱うことができます。
Swiftのオブジェクト指向は、一般に「クラスベース」と呼ばれるものです。
「クラス」という、オブジェクトの設計図に当たるものを定義しておき、これをもとにオブジェクトを作ります。
クラスから作成されるオブジェクトを「インスタンス」と呼びます。
Swiftでは、定義したクラスから、実際に操作することのできるインスタンスを作って利用する、というわけです。
クラスの中には、値を保管する変数と、処理となる関数を入れておくことができます。
クラス内に用意される変数を「プロパティ」、クラス内に用意される関数を「メソッド」と呼びます。
クラスの定義
クラスの定義のもっともシンプルな形は、以下のようなものになります。
……プロパティやメソッドを記述する……
}
「class 〇〇」といったものの後に{}をつけて、その中にクラス内に用意するものを記述する
という形になります。
例として「Helo」クラスの定義をおこないます。
このクラスでは、nameというプロパティと、sayというメソッドが用意されています。
これらが、Heloクラスに用意されている機能というわけです。
sayメソッドの中では、nameプロパティが使われています。こんな具合に、クラスにあるメソッドの内部では、
そのクラスにあるプロパティやメソッドがそのまま使えるようになっています。
var name = “Taro”;
func say(){
println(“Hello, ” + name + “!”);
}
}
インスタンスの作成
クラスからインスタンスを作るには、そのクラス名を関数のように呼び出すだけです。
例えば、「Abc」というがあったとしたら、以下のようにしてインスタすを作ることができます。
プロパティ/メソッドの呼び出し
プロパティやメソッドの呼び出しは、インスタンスを収めた変数の後にドットを付けてプロパティ名やメソッドの呼び出しを記述します。
例えば、クラスAbcの中にefgというプロパティ、xyzというメソッドがあったとすると以下のように利用することができます。
var x = obj.efg; // efgの値を取り出す
obj.efg = 〇〇; // efgの値を変更する
obj.xyz(); // xyzを呼び出す
③Swiftについて深く調べる
ここまで基本を駆け足で紹介していきましたが、Swiftには他にも便利な機能や独自の考え方が多くあります。それらをいくつか列挙します。
クラスの特性
「継承」「オーバーライド」「Computedプロパティ」「クラス・プロパティ/クラス・メソッド」といったさまざまな機能があり、クラスを深く使っていく上でとても有効なものです。
配列と辞書
多数の値をまとめて管理する「配列」と「辞書(Dictionary)」というものがあります。
構造体、列挙型、タプル
Swiftでは、先にあげた変数だけでなく、複雑な構造を持った値がたくさん登場します。
構造体、列挙型(enum)、タプル(Tuple)が代表的なものです。
関数リテラルとクロージャ
Swiftには「クロージャ」という機能があります。これは、関数を「値」として扱うための仕組みです。
プロトコルとエクステンション
Swiftには、クラスを拡張するのに役立つ機能が用意されています。
プロトコルはメソッドの実装を義務付けるもので、エクステンションはメソッドを後から追加します。
これらの機能はすぐに必要にはならないですし、有効に使えるためにはしっかり理解する必要があります。
基本を押さえたら、これらは随時学びながらアプリ開発を行ってください。
「プログラミング学習に苦戦しているあなたへ」
独学でのプログラミング学習の挫折率は9割以上と言われています。
✔プログラミングを身につけて、年収をUPさせたい
✔ITエンジニアになって、働き方を変えたい
✔生活を変えたいけど、何からやればよいか分からない
と思っているあなたへ向けて、
挫折率9割に負けない「プログラミング学習必勝法」を無料でプレゼントします!
完全無料なので、悩む前に今すぐ下のバナーをクリックして資料をGETしましょう!
\簡単30秒/
下のバナーからLINE友だち追加をして、無料で限定資料をGET!
④Storyboardでまずは開発する
Webページ制作では要素のレイアウトをHTML・CSSで行い、動的な振る舞いをJavaScriptで実装します。
iOSアプリ開発においては、ボタン要素や画像要素といったレイアウトを「Storyboard」で行い、動的な振る舞いをプログラミング言語「Swift」で実装することができます。
Storyboardを使わずにSwift言語だけでアプリを作ることも可能ですが、Storyboardを使う方が直感的にUIを作成できるため最初のうちはおすすめです
⑤プロジェクトを作成する
iOSアプリ開発のフレームワークである「UIKit」を使い、1画面のみのアプリを作りましょう。
■ 手順
① 画面左側から「Application」を選択します。
② 画面右側の一覧から「Single View Application」を選択します。
③ 「Next」をクリックします。
つづいて、プロジェクトの設定画面が表示されます。
② [Language]を「Swift」にします。
③ 「Next」を押し、任意の場所にプロジェクトファイルを保存します。
⑥Storyboardによる画面設計
プロジェクトの準備ができたので、画面を設計します。
iOSアプリのそれぞれの画面は、ViewControllerという単位で分かれています。
画面を設計するのがStorybordです。
実際の設計はMain.storyboardというファイルを使って行います。
最初はボタン1個、テキストボックス1個でも構いません。
配置し、何等かのプログラミングを簡単に行うだけでもいいのです。
⑦アプリの実行
開発はトライアンドエラーです。
こまめに動作確認しましょう。
Xcodeで開発したアプリは、実機のiOS端末または「iOSシミュレーター」で動作を確認できます。
■ 手順
① 画面上部のメニューバーより「iPhone 6s」等を選択します(ご自身の目的の環境をお選びください)。
② ビルドボタンを押すと、iOSシミュレーターが起動します。
これで実際に作成したアプリを実行しながら、開発する流れを繰り返してアプリ開発は進んでいきます。
さいごに
最初はやはりXcodeという特定の環境で戸惑うとは思いますが、画面作成などは、Webの知識と絡めながら学んでいくとSwiftアプリ開発への抵抗も少なくなっていくでしょう。
XcodeでのSwift開発になれてくるとアップルの様々なデバイス、たとえば「Apple Watch」などのに対応アプリ開発も容易に可能になります。
ぜひ根気よく続けてみてください。