連載
» 2015年11月17日 05時00分 公開

初心者のためのSwiftで始めるプログラミング入門(7):iOSアプリを作るなら最低限覚えておきたい「オブジェクト指向」の基礎知識 (4/4)

[諏訪悠紀,アンダースコア]
前のページへ 1|2|3|4       

イニシャライザーの引数

 イニシャライザーには引数を付けることができます。イニシャライザーに引数を付けることで、インスタンスの生成時に値を渡し、その値を元にインスタンスを組み立てることができます。

イニシャライザーの引数

 イニシャライザーの引数をよく使うケースがプロパティの初期値の設定です。プロパティの説明で、プロパティを定義するときに値を入れなければいけないと解説しました。しかし、イニシャライザーの中でプロパティに値を代入している場合は、プロパティの定義時に値を代入している必要はありません。つまり、イニシャライザーをプロパティの初期設定に使えるというわけです。

 「ボタン」のイニシャライザーに、引数を追加してみましょう。次のプログラムを書いてみてください。

class ボタン {
    let ラベル: String
    init(ラベルの文字: String) {
        ラベル = ラベルの文字
    }
}

 このクラスでは「ラベル」というプロパティ、それから「ラベルの文字」という引数付きのイニシャライザーを定義しています。「ラベル」には値が代入されていませんが、イニシャライザーの中で代入されているため、インスタンス生成後には必ず値が入るようになっています。そのため、プロパティの定義時には値の代入が不要になっています。なお、この場合はプロパティが何の型であるか分かるように、型を指定する必要があります。

 このクラスのインスタンスを生成してみましょう。次のプログラムを書いてみてください。

let キャンセルボタン = ボタン(ラベルの文字: "キャンセル")
print(キャンセルボタン.ラベル)

 インスタンスを生成するときにはクラス名の後に「()」を書きますが、この中にはイニシャライザーの引数が入ります。「()」の中には「引数名: 値」の形式で、引数に入れる値を書きます。「ボタン」クラスのイニシャライザーの引数の型はString型にしているので、「キャンセル」というString型の値を入れています。

 こうして生成されたインスタンスは、イニシャライザーの引数として渡した「キャンセル」という値が「ラベル」プロパティに代入されます。

イニシャライザーの引数の利用

複数のイニシャライザー

 引数の数や型が異なっていれば、複数のイニシャライザーを定義できます。「複数のイニシャライザーを定義する」とは、つまり「インスタンスを生成する方法を複数パターン用意する」ということです。

複数のイニシャライザー

 複数のイニシャライザーを定義するには、1つのクラスの中で同じ引数の指定になっているイニシャライザーが存在していないか注意しながら定義します。次のような形式で定義します。

class クラスの名前 {
    // 引数なしのイニシャライザー
    init() {
    }
    // 引数ありのイニシャライザー(1つの場合)
    init(引数: 引数の型) {
    }
    // 引数ありのイニシャライザー(2つの場合)
    init(引数A: 引数Aの型, 引数B: 引数Bの型) {
    }
}

 先ほどイニシャライザーを追加した「ボタン」クラスは、インスタンス化するときに必ず「ラベル」の値を指定しなければなりませんでした。このクラスに引数なしのイニシャライザーを加えて、使いやすくしてみましょう。次のプログラムを書いてみてください。

class ボタン {
    let ラベル: String
    init() {
        ラベル = "OK"
    }
    init(ラベルの文字: String) {
        ラベル = ラベルの文字
    }
}

 引数なしのイニシャライザーを新たに追加しました。引数なしのイニシャライザーの中では、「ラベル」に「OK」という文字を代入する処理が書かれています。つまり、引数なしのイニシャライザーが呼ばれる場合は「ラベル」に「OK」という値が代入されるようになります。

 複数のイニシャライザーが定義されているクラスからインスタンスを生成する場合は、どのイニシャライザーを使ってインスタンスを生成するか指定する必要があります。インスタンスを生成するときのプログラム「クラス名()」の「()」に入れる引数によって、該当する引数を定義しているイニシャライザーが使われます。

引数の違いによるイニシャライザーの使い分け

 それでは、先ほど定義した2つのイニシャライザーを使い分けてみましょう。次のプログラムを書いてみてください。

// 引数なしのイニシャライザーを使用
let OKボタン = ボタン()
print(OKボタン.ラベル)
 
// 引数ありのイニシャライザーを使用
let キャンセルボタン = ボタン(ラベルの文字: "キャンセル")
print(キャンセルボタン.ラベル)

 このプログラムでは、2つのイニシャライザーが定義された「ボタン」クラスのインスタンスを、各イニシャライザーを使って生成しています。

イニシャライザーの使い分け

コラム「プログラムをサクサク書ける『コード補完』機能」

 Playgroundを使ってプログラミングを実践している方はすでにお気付きかと思いますが、プログラムをある程度書いているとプログラムの候補が表示されます。このプログラムの候補のことを「コード補完」と言います。もしくは「自動補完」「オートコンプリート」などとも言います。

コード補完

 コード補完は、iPhoneでメールやメッセージを入力するときに表示される「予測変換」によく似た機能です。実際に入力されている内容を元に、入力しようとしているプログラムを推測し、候補として表示してくれます。プログラムの候補は、標準搭載されている機能や、そこまでに記述されてきたプログラムから導き出されます。

 プログラムを入力中に、コード補完の中に自分が入力しようとしている文字を見つけたら、「カーソル」キー(矢印)で選び、「エンター」キーを押しましょう。すると、そのプログラムが一気に入力されます。プログラムを一文字一文字書く手間が省けるので、効率的にプログラミングを進めることができます。


次回からは、実際にiPhoneアプリを作る

 今回は、実際のiOSアプリ開発により近いレベルの機能を解説しました。

 クラスの機能は今回紹介したもの以外にもたくさん備わっていますが、本連載ではiOSアプリ開発のスタートラインに立てることを目標としていることもあり、より深い機能については紹介しきれていません。ご興味のある方は、下記など他の記事も参考にしながら、理解を深めていただきたいと思います。

 これまで学習した内容を基に、次回からは、実際にiPhoneアプリを作り始めます。次回をお楽しみに!

著者紹介

諏訪悠紀

アンダースコア株式会社でiOS/Androidのアプリ開発に携わっています。


ブログGoogle Play StoreiTunes App Store


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。