Objective-CとSwiftを使ってみよう – クラスを定義する(Swift編)

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

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ではクラスプロパティーやスタティックプロパティーも定義することができる。この場合はvarletの前にclassstaticつけることで指定できる。インスタンス単位ではなくクラス単位となる。以下はスタティックプロパティーの例である。

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の前にclassstaticをつければ可能である。アクセス修飾子もプロパティーに準ずる。

最後に

SwiftではObjective-Cと比べるとかなり進歩している部分があり、クラスの定義もかなり柔軟性を増していると言える。Objective-Cではできなかったことが多数できるようになっており、ここでは説明していなかったこともできる。

今回はそれらについては説明していなかったが、近いうちにここでは説明していなかったことについても触れてみたい。

タイトルとURLをコピーしました