インスタンスにはメソッドという機能を使って、関数を持たせることができます。メソッドを使うことで、何かしらの処理をインスタンスの中で行わせることができます。
メソッドを定義するには、次のように書きます。
class クラスの名前 {
func メソッドの名前() {
}
}
メソッドは連載第6回「プログラマーの腕の見せどころ――Swiftの関数、引数、戻り値の基本的な書き方と使い方」で使った関数と同じ書き方で定義します。引数や戻り値なども付けることができます。クラスの中では同じ名前かつ同じ引数のメソッドは複数定義できないという点に注意しましょう。
class クラスの名前 {
// 引数付きのメソッド
func メソッドの名前(引数名: 引数の型) {
}
// 戻り値付きのメソッド
func メソッドの名前() -> 戻り値の型 {
return 戻り値
}
}
それでは実践です。先ほどの「ボタン」クラスに、メソッドを追加してみましょう。次のプログラムを書いてみてください。
class ボタン {
func 押す() {
print("ボタンを押したよ!")
}
}
このプログラムでは「押す」という名前のメソッドを新たに定義しています。メソッドの中では「ボタンを押したよ!」という文字列を出力するような処理が書かれています。
関数の回で学んだときと同様、メソッドを定義しただけでは何も起こりません。「ボタン」クラスのインスタンスに対して、メソッドを実行する指示を行わなければいけません。メソッドを呼び出すときは、プロパティと同様に「.」を使います。
インスタンス.メソッド名()
「ボタン」クラスのインスタンスの「押す」メソッドを呼び出してみましょう。次のプログラムを書いてみてください。
let 決定ボタン = ボタン() 決定ボタン.押す()
「決定ボタン」のメソッドが呼び出され、結果画面に「ボタンを押したよ!」が表示されるはずです。
関数と同様、引数を定義すればメソッドを実行するときに値を渡せますし、戻り値を定義すれば、メソッドの実行結果を受け取ることもできます。
インスタンスには、生成されてから破棄されるまでの一連の流れがあります。インスタンスはクラスを元に生成した後に使えるようになり、必要がなくなったら破棄され、以後使えなくなります(※)。
※インスタンスを破棄する指示については、iOSアプリの場合コンピューターがほぼ自動的に行ってくれるため(Auto Reference Counting)、自分でプログラムに明示的に書く必要はありません。少し分かりづらいところではありますが、初めのうちは生成するところだけ理解していれば問題ありません。
インスタンスには、生成されるタイミングで何かしらの処理を行わせることができます。この処理のことを「イニシャライザー」と言います。
イニシャライザーは、次のように書きます。
class クラスの名前 {
init() {
// 生成されるときに行いたい処理
}
}
「init」から書き始め、続けて「()」を書きます。「()」の中には関数と同じように、引数が入ります。続けて「{}」の中にインスタンスが生成されるときに行いたい処理を書きます。
「ボタン」クラスの中にイニシャライザーを定義し、インスタンスの生成時に処理を加えてみましょう。次のプログラムを書いてみてください。
class ボタン {
init() {
print("ボタンを作ったよ")
}
}
このプログラムでは、イニシャライザーが呼ばれると「ボタンを作ったよ」と出力するようになっています。つまり、インスタンスが生成したときに「ボタンを作ったよ」と出力されるようになります。
次のように、インスタンスを生成してみましょう。「ボタンを作ったよ」と結果画面に出力されるはずです。
let 決定ボタン = ボタン()
初心者でもiOS 9/tvOS向け2Dゲームが作れる標準フレームワークSpriteKitの基礎知識とチュートリアル
iOS 8のPhotoKitの概要&Xcode 6.1/Storyboard/Auto Layout/iOSシミュレーターの基本的な使い方
開発者向けiOS 9、WatchOS 2、Swift 2、Xcode 7の新機能と新しいApple Developer Programの参考情報まとめ
iOSアプリ開発でObjective-CからSwiftに移行するための手順、注意点まとめ〜言語仕様の違いは? 連携時の呼び出し方は?
アップル、新プログラミング言語「Swift」「iOS 8 SDK」「Xcode 6」のベータ版を発表
外から見るWWDC 2014キーノート――Swiftに感じるAppleの本気
Excelでプログラム作成を始めるメリットとマクロの基本Copyright © ITmedia, Inc. All Rights Reserved.