Objective-CとSwiftを使ってみよう – クラスを定義する(Objective-C編)ではObjective-Cでのクラスの定義方法について説明した。今回はそのSwift編といきたい。Swiftにおいては、Objective-Cとは違う部分が多々あるので、気をつけたい。
クラスの定義の仕方
SwiftではObjective-Cとは違い、宣言と実装に分かれていない。ここでは「Hello.swift」で定義する場合について説明したい。
サンプルコード
class Hello {
func sayHello() {
print("Hello,world");
}
}
プロパティーを定義する
Swiftにおいては、プロパティーの定義はclass内に設定する。初期値を設定した場合は型推論により、初期値に指定された型が割り当てられるほか、任意の型を明示的に指定することができる。
class Hello {
// 初期値を指定する場合
var foo = 0
// 明示的に型を指定した場合
var bar: Int = 0
// 定数
let baz = 0
}
なお、Swiftではクラスプロパティーやスタティックプロパティーも定義することができる。この場合はvar
やlet
の前にclass
やstatic
つけることで指定できる。インスタンス単位ではなくクラス単位となる。以下はスタティックプロパティーの例である。
class Hello {
static var foo = 0
}
また、アクセス修飾子をつけることも可能で、以下のようにできる。
private
– そのクラス内からのみアクセス可能fileprivate
– そのファイル内からのみアクセス可能internal
– 同モジュール内からのみアクセス可能public
– すべてのモジュールからアクセス可能だが、別モジュールは継承・オーバーライドはできない。open
– すべてのモジュールからアクセス・継承・オーバーライド可能
クラスプロパティーとスタティックプロパティーについての違いについては、別の機会に説明したい。
メソッドを定義する
Swiftでは、以下のようにメソッドを定義する。
class Hello {
// 引数なし
func sayHello {
print("Hello,world")
}
// 引数あり
func something(foo: Int) {
// do something
}
func something(foo: Int, bar: Int) {
// do something
}
// 返り値あり
func getFive() -> Int {
return 5;
}
}
Swiftではクラスメソッド及びスタティックメソッドの定義も可能で、この場合はfunc
の前にclass
やstatic
をつければ可能である。アクセス修飾子もプロパティーに準ずる。
最後に
SwiftではObjective-Cと比べるとかなり進歩している部分があり、クラスの定義もかなり柔軟性を増していると言える。Objective-Cではできなかったことが多数できるようになっており、ここでは説明していなかったこともできる。
今回はそれらについては説明していなかったが、近いうちにここでは説明していなかったことについても触れてみたい。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。