【Swift入門】クラスの基本やイニシャライザなど

2021年1月18日

クラスとは設計図のようなものです。

クラスを使ってインスタンスを作ることで使えるようになります。

インスタンスはクラス(設計図)を基にして作った『実体』のことです。

例えば、動物クラスから『イヌ』や『ネコ』や『パンダ』などのインスタンスを作って使えるようにするイメージです。

クラスには変数、定数、関数を書き込むことができます。

クラス内の変数や定数のことを『プロパティ』、関数のことを『メソッド』と呼びます。

クラスは

class クラス名 {
    プロパティ1、メソッド1…}

と記述します。

インスタンスは

var 変数名 = クラス名()

と記述します。

インスタンスを使うときは

インスタンス.プロパティインスタンス.メソッド

と記述します。

それでは、実際にクラスを使ってみましょう。

新しくPlaygroundを作って空にしてください。

クラスの基本

今回は年齢と動物の種類を表す二つのプロパティと、動物が噛みつくメソッドを持ったクラスを作ってみましょう。

class Animal {
    var age = 2
    let kind = “犬”
   
    func Bite() {
        print(“\(age)歳の\(kind)が噛みつく”)
    }
}

と記述しましょう。

コードについて説明していきます。

まず、クラスの名前をつける必要があるので、『Animal』と名前をつけます。

名前の表記方法は『アッパーキャメルケース』です。

アッパーキャメルケースというのは単語の先頭を大文字にする表記方法です。

例えば、『AnimalTall』というクラスがあった場合、アッパーキャメルケースだとAnimalの『A』とTallの『T』を大文字にするといった感じです。

次にクラスの中をみていきましょう。

クラスの中には二つのプロパティと

一つのメソッドがあります。

それぞれみていきましょう。

プロパティは年齢を表す変数『age』に整数の値『2』が格納されたものと

動物の種類を表す定数『kind』に文字列の値『犬』が格納されたものがあります。

メソッドは噛みつくことを表す『Bite』という名前で、

処理内容はageとkindと用いて、『age歳のkindが噛みつく』とコンソールに表示させるといったものです。

今回はageが『2』でkindが『犬』なのでメソッド『Bite』を使うとコンソールには『2歳の犬が噛みつく』と表示されるはずです。

作ったクラスAnimalを

実際に使ってみましょう。

クラスを使うにはクラスからインスタンスという実体を作る必要がありました。

インスタンスを作ってみましょう。

var dog = Animal()

と記述しましょう。

これでAnimalクラスを使ってインスタンスを作ることができました。

このインスタンスを使って、プロパティを取り出したり、メソッドを使ってみたりしましょう。

まずはageをコンソールに出力してみましょう。

print(dog.age)

と記述しましょう。

コードの説明をすると、このdogというのは

作ったインスタンスのことです。

インスタンスに『 . 』をつけることで

インスタンスを作るのに使ったクラスのプロパティやメソッドを取り出すことができます。

今回はageとしたので、

dogインスタンスの基になったAnimalクラスのageというプロパティの

値を取得します。

ageの値は『2』なので

print(dog.age)という記述により、

コンソールには『2』と出力されるはずです。

実際にそうなるのか実行して確かめてみましょう。

実行ボタンを押してください。

すると予想通りコンソールには『2』と出力されます。

次に同じようにしてkindプロパティの値も表示させてみましょう。

やることは簡単でインスタンスの後ろのageを

kindに書き換えるだけです。

このように記述するとkindプロパティの値である『犬』が取り出され、

コンソールには『犬』と出力されるはずです。

実行ボタンを押してみましょう。

すると予想通りコンソールには『犬』と出力されますね。

次にBiteメソッドを使ってみましょう。

dog.Bite()

と記述しましょう。

このように記述するとBiteメソッドを使うことができます。

Biteメソッドの中身は

ageとkindを用いてコンソールに文字列を出力する処理です。

今回はageが『2』で

kindが『犬』なので

コンソールには『2歳の犬が噛みつく』と出力されるはずです。

実際にそうなるのか実行して確認してみましょう。

実行ボタンを押してください。

すると予想通り『2歳の犬が噛みつく』と出力されますね。

今回はageの値が『2』やkindの値が『犬』など

プロパティが固定した値でした。

しかし、インスタンスに応じて値を変えたい場合があります。

例えば、catインスタンスではkindを『猫』、ageを『5』や、pandaインスタンスではkindを『大熊猫』、ageを『3』といったようにです。

次はインスタンスに応じて値を変えられるようにしていきましょう。

イニシャライザー

インスタンスに応じて値を変えられるようにするには、イニシャライザを使う必要があります。

イニシャライザとはインスタンスを作る時にプロパティに初期値を与えるものです。

イニシャライザはクラスの中で

init(プロパティ1: 型, プロパティ2: 型) {
    self.プロパティ1 = プロパティ1
    self.プロパティ2 = プロパティ2}

と記述します。

実際にイニシャライザを使ってみましょう。

前回作ったクラスをコピーして

下の方にペーストしましょう。

ペーストしたら前回書いたコードをコメントアウトしておきましょう。

それでは始めていきましょう。

プロパティはイニシャライザを使って初期値を与えたいので、値を空にしておきましょう。

ここの部分を

var age: Int
let kind: String

と書き換えましょう。

プロパティに値が格納されていないのでエラーが出ますが、イニシャライザを記述すると消えるので問題ないです。

次にイニシャライザを記述しましょう。

init(age: Int, kind: String) {
    self.age = age    self.kind = kind}

と記述します。

コードについて説明しておきましょう。

まずinitの引数にはイニシャライザによって引数を与えたいプロパティを入れます。

今回はageと

kindの

二つのプロパティに値を格納したいので、そのように引数に記述します。

次にイニシャライザの中身について説明していきましょう。

まずは一行目のこの記述からです。

このselfというのは

クラス自身のことを指します。

今回だとselfはAnimalクラスのことですね。

なので『self.age』は

Animalクラスのageプロパティのことです。

次に『=』

の右側にある『age』は

イニシャライザの引数で指定した『age』です。

なので『self.age = age』という記述は

インスタンス作成時に『age』に指定した値を『ageプロパティ』

に格納するという意味になります。

同じように考えて『self.kind = kind』は

self.kindが

kindプロパティを表しており、

『=』の右側のkindがイニシャライザーのkindを表しています。

なので『self.kind = kind』という記述は

インスタンス作成時に『kind』に指定した値を『kindプロパティ』に格納するという意味になります。

実際にイニシャライザーを使ったインスタンスを作ってみましょう。

今回はageが3でkindが”猫”のcatというインスタンスを作ります。

var cat = Animal(age: 3, kind: “猫”)

と記述しましょう。

これで猫のインスタンスを作ることができました。

試しにBiteメソッドを

使ってみましょう。

cat.Bite()

と記述しましょう。

このように記述するとcatインスタンスのageは『3』でkindが『”猫”』なので、コンソールには『3歳の猫が噛みつく』と出力されるはずです。

実際にそうなるのか実行して確かめてみましょう。

実行ボタンを押してください。

すると予想通り『3歳の猫が噛みつく』と表示されましたね。