見出し画像

Swiftでいこう! - クラスと構造体

いろんなものをひとまとめにして、それを使いませれば使い勝手が良くなります。

構造体やクラスを使うとひとまとまりのブロックのようにその機能を追加したり出来ます。

構造体はより構造的なものを、クラスは雛形的に派生クラスも柔軟に作ることが出来てます。

いわゆるオブジェクト指向のプログラミングと呼ばれます。

まとめて使うものとしては関数もあります。構造体やクラスでは関数をメソッドとして実行するものを定義することが出来ます。

構造体やクラスはものを定義してそれをどのように動かすかを定義することが出来ます。

構造体とクラスの共通点は

・値を格納するプロパティを定義できます
・機能を提供するメソッドを定義できます
・サブスクリプト構文を使用して値へのアクセスを提供するサブスクリプトを定義できます
・初期状態を設定するためのイニシャライザを定義できます
・extension で機能を拡張できます
・特定の種類の標準機能を提供するためにプロトコルに準拠できます

クラスはさらに

・あるクラスが別のクラスの特性を継承できます
・実行時のクラスインスタンスの型の確認と解釈に型キャストが使えます
・デイニシャライザを使ったクラスのインスタンスに割り当てられているリソースの解放
・参照カウントを使ったある同じクラスインスタンスへ複数から参照できます

ができます。
作ってみましょう。構造体は"struct"を頭につけて

struct SomeStructure {
    // 構造体の定義をここに
}

クラスは"class"を頭につけて

class SomeClass {
    // クラスの定義をここに
}

となります。

実際の数字を入れてみます。構造体。

struct Resolution {
    var width = 0
    var height = 0
}

この構造体をクラスで使います。

class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

これを使うためには変数に入れることでインスタンス(実態化)を作ることができます。

let someResolution = Resolution()
let someVideoMode = VideoMode()

それぞれのプロパティを取得することが出来ます。

someResolution.width

とすると先に定義した

struct Resolution {
 var width = 0
 var height = 0
}

から"0"をとることが出来ます。変数に"."で繋いで表します。

"クラスVideoMode"の" var resolution = Resolution()"にもアクセスすることが出来ます。VideoModeを変数someVideoModeに代入しているので、

someVideoMode.resolution.width

で先ほどと同じものが取得できます。


いいなと思ったら応援しよう!