基本的なクラスの利用
SwiftもObjective-Cと同様にオブジェクト指向の言語です。プログラムの最小の単位としてクラスを利用します。
クラスを呼び出す
クラスを利用する際には、最初にインスタンスを生成します。インスタンスとはクラスから生成されたオブジェクトです。インスタンスを生成する際の書式は次のようになります。
var 変数名:クラス名 = クラス名( initメソッドの引数 )
同一プロジェクトであれば、import文で利用するクラスのimport文は不要です。Objective-Cと違って、allocやinitWith~メソッド等で初期化する必要がなく、クラス名と引数のみでインスタンスを生成できます。クラスのプロパティを参照したり、メソッドを利用する際にはインスタンスの後ろに「.(ドット)」をつけて続けて記述します。具体的な利用例は次の通りです。
// Catクラスのインスタンスを生成
// initメソッドでは例外的に最初の引数名をラベルとして利用可能
var c : Cat = Cat(name:"とら", age:2);
// メソッドを実行
c.setInfo(nawabari: "公園", koubutsu: "カリカリ")
// プロパティを参照
println("名前は\(c.Name)です")
println("\(c.getAge())歳です")
println("縄張りは\(c.Territory)です")
println("好物は\(c.Favorite)です")
// 結果:「名前はとらです」「2歳です」「縄張りは公園です」「好物はカリカリです」を出力
Objective-Cに比べると、Swiftでは短い記述でクラスが利用でき、プログラムが読みやすくなりました。
クラスの継承
Swiftでは、Objective-Cと同様にベースとなるクラスを継承/プロトコルを実装してクラスを作成して開発を進めます。この方法は、Objective-Cでのアプリ開発と変わりません。つまり、Swiftでのアプリ開発も、最初から用意されているクラスをうまく拡張して機能を作っていくのが最も早い方法だと言えます。本節では、前節で作成したCatクラスをスーパークラスとしてサブクラスMukuを作成して、クラスの継承の例を示します。
// Catクラスを継承してMukuクラスを定義
class Muku:Cat
{
var Weight:Int
// 初期化処理
init(name:String, age:Int, weight:Int)
{
Weight = weight
// スーパークラスのinitメソッドを実行
super.init(name: name, age: age)
}
// スーパークラスのメソッドを上書き
override func getName() -> String {
return "名前は\(Name)です"
}
// このクラスだけのメソッドを定義
func getWeight()->Int
{
return Weight
}
}
スーパークラスには「super」でアクセスできます。スーパークラスのメソッドを上書き(オーバーライド)する際には、「orverride」をメソッド名の前につけて上書きであることを明記します。作成したクラスの実行結果は次のようになります。
var m : Muku = Muku(name: "むく", age: 1, weight: 500)
println(m.getName())
println("\(m.getAge())歳です")
println("体重は\(m.getWeight())gです")
// 結果:「名前はむくです」「1歳です」「体重は500gです」を出力
クラスで定義したメソッドだけでなく、オーバーライドしたメソッド/スーパークラスのメソッドも利用できていることがわかります。
まとめ
今回はSwiftのクラスやメソッドといった部品単位でのプログラムの解説を行いました。次回以降、アプリの画面を作成するサンプルを通してより実際のアプリ開発に近い内容でSwiftの使い方を説明します。
