0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

構造体とクラスの違いについてのメモ

Last updated at Posted at 2020-06-21

Swift初心者が構造体とクラスについて、理解できた事をメモしました。間違えていたら、ご指摘ください。

#構造体とクラスの違い

構造体とクラスはとてもよく似ていて分からなかったのですが、調べていくと結構違いがありました。

###①継承

継承する事で他のオブジェクトの機能をほぼ引き継ぎ、使用することができます。

  クラス・・・他のクラスを継承できる

  構造体・・・他の構造体を継承できない


class a {
    var b : Int
    init() {
        b = 10
    }
}

struct c {
    var d : Int
    init() {
        d = 10
    }
}

//クラスaを継承
//但し、親クラスのイニシャライザの継承は、基本的にはしないようです
class z : a {
    override init() {
    }
}

//構造体cを継承、エラー
struct q : c {     
    override init(){        
    }
}

###②型

参照型か値型かによって、インスタンス化する際に定数・変数のどちらを使うかで、格納されているプロパティを書き換えできたり、できなかったりします。

  クラス・・・参照型  変数・定数どちらでも書き換え可能

  構造体・・・値型   変数のみ書き換え可能

構造体のプロパティ定義で定数を使うと、あとで変えることができません。


//クラスの場合
class a {
    var b : Int
    init() {
        b = 10
    }
}
//インスタンス化
let e = a()

//10が出力される
print(e.b)

//20が出力される
e.b = 20
print(e.b)


//構造体の場合
struct c {
    var d : Int
    init() {
        d = 10
    }
}
//インスタンス化 ここをvarに変えれば下記のエラーは出ないです
let f = c()

//10が出力される
print(f.d)

//ここでエラーが出ます
f.d = 20
print(f.d)


###③イニシャライズ

  クラス・・・イニシャライズで初期値を与える必要があります

  構造体・・・イニシャライズで初期値を与えなくても動きます


//クラスの場合

class sampleString {
    var sString : String
//init() {   }で初期値を与える
    init() {
        sString = "sString"  //self.sString = "sString"
    }
}
let insString = "hello"
print(insString)


//構造体の場合

struct sampleStruct {
    var sStruct : String
}
//init() {   }はなくても動く
let insStruct = "hello"
print(insStruct)

###④使い分け

やはり継承できるかどうかが、大きな違いだと思います。これ以外の部分ではデータの容量で決めるとか、値型を使いたいとかそういう部分なのかなと思います。

  クラスを使う・・・元のクラスから、その機能を継承して新しいクラスを作っていく場合

  構造体を使う・・・継承を使わない前提で、一つのデータのまとまりを使いたい場合

###  
因みに、プロトコルの採用はクラス、構造体のどちらでもできます。まあ、共通の規則を構造体全てに一から書いていくのも、合理的ではないですしね。ただ、クラスの継承も、プロトコルの採用も同じような場所に書くから、多少ややこしいです。最初は構造体でも継承できるのかなって思っていました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?