• WebCamp_インタビュー
    「自信の持てるスキルを得たい!」内定辞退した女子大生がプログラミングを学習したワケ。
    2018.04.28
  • WebCamp_インタビュー
    【卒業生インタビュー】台湾で月間100万UUの訪日旅行メディアを手掛けるCEOが、プログラミングを学んで得たものとは?
    2018.01.15
  • WebCamp_インタビュー
    「1カ月頑張ればこの先が見えてくる」地元メディアを立ち上げたママさん
    2017.07.20
  • WebCampPro_インタビュー
    未経験でも寿司職人からWebデザイナーになった!ホスピタリティでスクールを支える宮脇トレーナー
    2017.05.26
  • WebCamp_インタビュー
    “未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
    2017.10.04
  • WebCamp_インタビュー
    時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
    2018.01.26
  • WebCampPro_インタビュー
    自分で稼ぐ力をつけるため、新卒5年目の営業マンがエンジニアに転職!【WebCampPro転職者インタビュー】
    2018.02.02
  • WebCamp_インタビュー
    【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
    2018.01.15
  • WebCampPro_インタビュー
    未経験から上京し、エンジニアとしてチームラボグループに転職!【WebCampPro卒業生インタビュー】
    2018.03.10
  • WebCampPro_インタビュー
    未経験31歳からエンジニア転職を実現【実際に聞いてみた】
    2017.04.01
  • WebCamp_インタビュー
    【WebCamp受講生インタビュー】起業準備中にCEOが気がついたプログラミングスキルの重要性とは?
    2017.12.25

◆当サイトで人気のプログラミング教室のおすすめランキングはこちら!
プログラミングは独学では非効率で、時間を無駄にするリスクがあります。効率的なカリキュラムで学べるスクールを受講しましょう。

WEBCAMP【マンツーマンサポート】1ヶ月短期集中でプログラミングを学ぶスクール
1ヶ月通い放題・メンター常駐の教室環境でプログラミングを学びたい方!
TechAcademyオンラインで開講しているプログラミングスクール
オンラインでどこでも学べる!/教室に行くのが忙しい人でも安心!
Tech Camp教養としてのITスキルを学べるスクール
Webデザイン/AI(人工知能)/IOS/Androidアプリ制作/VRを学びたい方!
WEBCAMP PRO転職保証付き!エンジニアとして転職したい人におすすめ!
未経験からプロのエンジニアへ3ヶ月で転職する為のスクールです!
12月生募集中!当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
11月生は満員となっております。12月生募集に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

みなさんはSwiftの学習をしようと思っていませんか?

Swiftは3年前にできた言語で需要が増えているため、学習するのにおすすめの言語のひとつです。

今回の記事では、初心者の方に向けて、Swiftのアプリ開発をするステップを紹介していきます。

基本構文や定義を確認後、アプリ開発しながらの学習の流れをご紹介します。

※プログラミングを学んでみたいけど、時間がなくて全文の記事が読めない!という方は、WebCampの無料説明会(毎日開催)に参加してみてください!

 

①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」です。

②Swiftの基本を学ぶ

アプリ開発といっても、ソースの大半は基本的なものの集まりです。
これらのもっとも基本的なものからしっかり頭に入れていきましょう。
更に追求した深い内容については、ご自身で都度確認してみてください。

リテラル(値)について

ソースコード内に直接記述される値を一般に「リテラル」と呼びます。
リテラルの書き方は、多くのプログラミング言語で共通していることが多いです。

数値リテラル

数値は、ごく普通に数字を書くだけです。「123」とか「0.45」といった具合です。
さらに、普通の数字の書き方だけでなく、ちょっと変わった書き方もできます。

4桁ごとにアンダースコア

数字は、桁数が多くなると可読性が落ちます。
そこで一般社会では、例えば「1,000,000」みたいに、4桁ごとに区切り文字をつけて記述したりします。
これと同じことをSwiftでも行えます。
記号はカンマではなく、アンダースコア(_)になります。
また、桁数を揃えて見せるために、冒頭にゼロをつけて書くこともできます。

例) 0012_3456_7890 (1234567890 と同じ)

2, 8, 16進数

通常の10進数の他に、2進数、8進数、16進数の値も記述できます。
これらは、それぞれ数字の冒頭に「ゼロ」で始まる記号を以下のようにつけます。
※進数自体の説明は行いませんので忘れた方は調べてください。

2進数――「0b」を冒頭につけて記述(0b11011 など)
8進数――「0o」(2文字目はアルファベットのオー)を冒頭につけて記述(0o7623 など)
16進数――「0x」を冒頭につけて記述。値は0~9とA~Fを使って書く(0x5fa3 など)

テキストリテラル

テキストは、値の両端をダブルクォート(")でくくって記述します。
これも多くの言語でよく使われている仕様です。

例) "Hello" "こんにちは"

エスケープ記号

テキストリテラルには、直接文字として記述できない記号があります。
例えば、ダブルクォートは囲むために使っているのでそのままは書けません。
また改行コードのような制御記号も書けません。
これらは、エスケープ記号であるバックスラッシュ記号を付けて記述します。

\"――ダブルクォート(")記号
\\――バックスラッシュ(\)記号
\t――水平タブ記号
\r――キャリッジリターン
\n――ラインフィード
\0――ヌル文字

例) "これは\"ダブル\\クォート\"記号\n"

変数の埋め込み

リテラル内には、変数を埋め込むことができます。
これは、\(変数)といった形で記述します。
例えば変数strをリテラル内に埋め込むならこんな漢字に記述できます。

例) "ここに\(str)と表示する"

真偽値

二者択一の状態を示すのに用いるのが真偽値です。
真偽値は、「true」「false」がリテラルとして用意されています。
これらを直接記述して使います。

変数について

変数は、あらかじめ宣言をしてから利用をします。
宣言をせずに使ったり、あるいは既に宣言した変数を再度宣言したりするとエラーになります。
変数の宣言は以下のように記述します。

var 変数 = 値
var 変数 :タイプ = 値

「最初に値を代入しないでおきたい」という場合は、こんな具合に書くこともできます。

var 変数: タイプ

定数について

変数は一般に値の変更が可能ですが、「後で変更できないようにしたい」という場合には、定数を使うことができます。
これは以下のように記述します。

let 定数 = 値
let 定数 : タイプ = 値

定数は、基本的に値の代入と宣言をセットで記述します。宣言だけしておき、後で値を代入することはできません。
宣言時に代入された値が定数の値となり、以後、変更することはできません。

変数のタイプについて

変数(定数)の宣言をするときには、変数名だけでなく、タイプ(型)を指定します。
Swiftの変数は、基本的に全て型が決まっています。変数を作成する際に、必ず型を指定しなければいけません。

ではなぜ「var 変数 = 値」といった書き方もできるのか?というと、代入する値から型を推測して設定するからです。
(そのため「var 変数」だけだとエラーになります)

Swiftは、基本的に「静的型付け」の言語なのです。
すべての変数は、最初に必ず型を指定し、その型の値しか代入できません。

型の種類

Swiftには、多数の方が用意されています。主な型についてここで整理しておきましょう。

Int ===> 一般的な整数型です。32bitまたは64bitの値になります(実行するCPUによります)。
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で除算(割り算)します。
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 / B と同じ)
A %= B ===> AをBで除算した余りをAに代入する。(A = A % B と同じ)

インクリメント/デクリメント演算子

変数の値を1増やしたり1減らしたりするためのものです。
これは以下のものが用意されています。

++A , A++ ===> Aの値を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 ===> AはBと等しいか大きい

論理演算子

真偽値の値によって真偽値の値を返すものです。
構文の条件として複数の比較演算の式を組み合わせて設定したりするのに用いられます。

A && B ===> 「AND演算」です。AとBの両方がtrueならばtrue。それ以外はすべてfalseとなります。
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 条件となるもの {
……条件が正しい時の処理……
}

ifの基本形(2)

if 条件となるもの {
……条件が正しい時の処理……
} else {
……正しくない時の処理……
}

条件カッコは不要

他の言語の経験があると、つい「条件はカッコで括る」と思ってしまいますが、Swiftの場合はカッコは不要です。
もちろん、つけてもかまいません。

OK: if (x == 0){……}
OK: if x == 0 {……}

ただし、条件の後に実行する処理や、elseの後で実行する処理部分は、必ず{}記号で括る必要があります。
他の言語では、1文だけしか処理が用意されない場合は{}を省略することができたりしますが、Swiftでは必ず{}が必要です。

else ifについて

条件が成立しない場合、elseにifをつけて「else if」として次の条件文を続けて書くことができます。こんな具合です。

if 条件 {
……処理……
} else if 条件 {
……処理……
} else if
……必要なだけ続けて書ける……
}

この場合も、else ifが成立しなければelseをつけたり、更にelse ifで次の条件を設定したりすることができます。

switch文による複数分岐

ifは真偽値で条件をチェックするため、二者択一の形でしか処理を分岐できません。
値を調べて多数の分岐を行えるようにするのが「switch」文です。

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の基本形

for 変数名 in 複数要素を持つ値 {
……繰り返す処理……
}

これは、配列やrangeのように複数の値をまとめて扱うものを利用した繰り返しです。
forの後に変数名を用意し、inの後に配列やrangeの値を記述します。
その後の{}内に繰り返す処理を用意します。

forの基本形

for 初期化 ; 条件 ; 後処理 {
……繰り返す処理……
}

これは、より細かく繰り返しを設定したいような場合に利用するものです。
forの後には、初期化処理、条件、後処理の3つの要素を用意します。

初期化処理 ===> 繰り返しをスタートする前に実行する処理を記述します。
条件 ===> 繰り返しを行う度に、この条件をチェックします。trueならば繰り返しを行い、falseならば構文を抜けて次に進みます。
後処理 ===> 繰り返し処理を実行後、ここに用意した処理を実行してから次の繰り返しへと進みます。

大抵の場合、初期化で変数を初期化し、後処理でその値を増減させて繰り返しを行わせるような使い方をします。
例えばこんな感じです。

for var i = 0;i < 10;i++ {
"index:" + String(i)
}

whileによる繰り返し

forは繰り返しごとに変化するような仕組みを構文の中に持っています。
が、もっと単純に「条件をチェックして繰り返すかどうか決めるだけ」というシンプルな繰り返し構文もあります。
それがwhile文です。

whileは、条件のつく場所によって異なる2つの書き方があります(後者はdo while文といわれたりします)。

whileの基本形

while 条件となるもの {
……繰り返す処理……
}

do whileの基本形

do {
……繰り返す処理……
} while 条件となるもの

whileの後に条件となるものを用意します。
この条件がtrueであれば繰り返しを実行し、falseになれば繰り返しを抜ける、という単純なものです。

単純でありながら、なぜ2つの書き方があるのか。それは、条件をチェックするタイミングの違いです。
前者(構文の最初にwhileがあるもの)は、まずwhileのあとにある条件をチェックし、それがtrueならば以下の{}部分を実行します。

後者(構文の最後にwhileがあるもの)は、繰り返し行う{}の部分をまず実行し、終わってからwhileの条件をチェックします。
ということは、最初から条件がfalseであったとしても、必ず1度は{}部分を実行してしまう、ということになります。

クラスの定義

Swiftは、オブジェクト指向言語です。ということは、もちろんオブジェクトを扱うことができます。
Swiftのオブジェクト指向は、一般に「クラスベース」と呼ばれるものです。
「クラス」という、オブジェクトの設計図に当たるものを定義しておき、これをもとにオブジェクトを作ります。

クラスから作成されるオブジェクトを「インスタンス」と呼びます。
Swiftでは、定義したクラスから、実際に操作することのできるインスタンスを作って利用する、というわけです。

クラスの中には、値を保管する変数と、処理となる関数を入れておくことができます。
クラス内に用意される変数を「プロパティ」、クラス内に用意される関数を「メソッド」と呼びます。

クラスの定義

クラスの定義のもっともシンプルな形は、以下のようなものになります。

class クラス名 {
……プロパティやメソッドを記述する……
}

「class 〇〇」といったものの後に{}をつけて、その中にクラス内に用意するものを記述する
という形になります。

例として「Helo」クラスの定義をおこないます。
このクラスでは、nameというプロパティと、sayというメソッドが用意されています。
これらが、Heloクラスに用意されている機能というわけです。

sayメソッドの中では、nameプロパティが使われています。こんな具合に、クラスにあるメソッドの内部では、
そのクラスにあるプロパティやメソッドがそのまま使えるようになっています。

class Helo {
var name = "Taro";
func say(){
println("Hello, " + name + "!");
}
}

インスタンスの作成

クラスからインスタンスを作るには、そのクラス名を関数のように呼び出すだけです。
例えば、「Abc」というがあったとしたら、以下のようにしてインスタすを作ることができます。

プロパティ/メソッドの呼び出し

プロパティやメソッドの呼び出しは、インスタンスを収めた変数の後にドットを付けてプロパティ名やメソッドの呼び出しを記述します。
例えば、クラスAbcの中にefgというプロパティ、xyzというメソッドがあったとすると以下のように利用することができます。

var obj:Abc = Abc();
var x = obj.efg; // efgの値を取り出す
obj.efg = 〇〇; // efgの値を変更する
obj.xyz(); // xyzを呼び出す

③Swiftについて深く調べる

ここまで基本を駆け足で紹介していきましたが、Swiftには他にも便利な機能や独自の考え方が多くあります。それらをいくつか列挙します。

クラスの特性

「継承」「オーバーライド」「Computedプロパティ」「クラス・プロパティ/クラス・メソッド」といったさまざまな機能があり、クラスを深く使っていく上でとても有効なものです。

配列と辞書

多数の値をまとめて管理する「配列」と「辞書(Dictionary)」というものがあります。

構造体、列挙型、タプル

Swiftでは、先にあげた変数だけでなく、複雑な構造を持った値がたくさん登場します。
構造体、列挙型(enum)、タプル(Tuple)が代表的なものです。

関数リテラルとクロージャ

Swiftには「クロージャ」という機能があります。これは、関数を「値」として扱うための仕組みです。

プロトコルとエクステンション

Swiftには、クラスを拡張するのに役立つ機能が用意されています。
プロトコルはメソッドの実装を義務付けるもので、エクステンションはメソッドを後から追加します。

これらの機能はすぐに必要にはならないですし、有効に使えるためにはしっかり理解する必要があります。
基本を押さえたら、これらは随時学びながらアプリ開発を行ってください。

④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」などのに対応アプリ開発も容易に可能になります。
ぜひ根気よく続けてみてください。

WebCamp・WebCamp Proについて

WebCampは1ヶ月でプログラミング・Webデザインスキルを学ぶ通い放題のプログラミングスクールです。WebCamp Proは3ヶ月間で未経験から即戦力エンジニアを育成する転職保証付きのプログラミングスクールです。

2つのサービスを運営するインフラトップでは、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。

キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?

12月枠も残りわずか当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
11月受入枠は満員となっております。12月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

▼未経験から1ヶ月でWebデザイン・プログラミングを学びたい方はこちら!

▼ついに開講!オンラインでWebデザインを学びたい方はこちら!

関連キーワード
学習の関連記事
  • 【誰でもわかる!】エンジニアの仕事内容を徹底解説
  • 初心者でも一瞬でわかるプログラミングの考え方・思考法
  • エンジニア必見!エンジニアが成長できるブログ紹介
  • エンジニアとは?仕事内容、年収、将来性を徹底解説
  • 【Rails入門説明書】find、find_byについて解説
  • プログラミング未経験者でも出来る開発環境構築
おすすめの記事