【Swift入門】構造体の配列化やイニシャライザなど

2021年1月20日

構造体とは、簡単に説明すると値をまとめておくためのものです。

クラスとほとんど同じです。

違う部分については追々やっていきましょう。

構造体は

struct 構造体名 {
    プロパティ1、メソッド1…
}

と記述します。

インスタンスは

var インスタンス名 = 構造体名()

と記述します。

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

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

と記述します。

それでは、実際に構造体を使ってみましょう。

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

構造体の基本

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

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

と記述しましょう。

記述内容はクラスとほとんど変わりませんね。

Classと記述していた部分がStructに変わっただけです。

コードの中身は

クラスのところで作ったものと同じなので、説明は省きます。

次にインスタンスを作ってBiteメソッドを使ってみましょう。

var dog = Animal()
dog.Bite()

と記述します。

この状態で実行するとageは『5』、kindは『犬』なので

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

実行して確かめてみましょう。

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

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

イニシャライザ

構造体でもイニシャライザを使って初期値を与えることができます。

書き方はクラスのイニシャライザと同じで

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

と書きます。

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

イニシャライザで初期値を与えるので、

という記述を

let age: Int
var kind: String

というように書き換えましょう。

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

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

と記述しましょう。

クラスと同じなので説明は割愛します。

次にインスタンスを書き換えましょう。

今回はパンダのインスタンスを作ろうと思います。

ここの部分の記述を

var panda = Animal(age: 10, kind: “パンダ”)
panda.Bite()

と書き換えましょう。

この状態で実行すると『”10歳のパンダが噛みつく』とコンソールに出力されるはずです。

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

すると予想通り『10歳のパンダが噛みつく』と出力されましたね。

構造体を配列にしてみる

構造体は配列にすることができます。

構造体にすることでインスタンスを複数格納することができます。

構造体を配列にするには

var 配列名: [構造体] = [
    構造体(),
    構造体()
]

と記述します。

今回はanimalsというAnimal構造体の配列を作って複数の動物を格納してみましょう。

var animals: [Animal] = [
    Animal(age: 10, kind: “トラ”),
    Animal(age: 2, kind: “人間”),
    Animal(age: 5, kind: “ヘビ”)
]

と記述します。

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

まず、

でAnimal型の配列を作った後に、その配列に複数のインスタンスが格納された配列を

格納するという内容です。

配列から要素を取り出して使ってみましょう。

今回は人間のインスタンスのBiteメソッドを使ってみましょう。

配列の要素番号は『0』から始まるので、人間のインスタンスの要素番号は『1』になります。

なので、人間のインスタンスのBiteメソッドを使いたい時は、要素番号『1』を用いて

animals[1].Bite()

と記述しましょう。

この状態で実行すると人間のインスタンスのBiteメソッドが読み込まれて、コンソールには『2歳の人間が噛みつく』と出力されるはずです。

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

すると予想通りコンソールには『2歳の人間が噛みつく』と出力されますね。