見出し画像

Swiftではじめてみよう!- クラスを理解。

データをまとめて管理する方法としてはクラスと構造体と2つあります。

クラスですがよくオブジェクト指向で使うものとして紹介されています。人間、動物、コンピュータ、帽子、食べ物、などなど身の回りのもの、全て物として捉えてコードで表現します。

クラスは設計図的なものなのでこの定義を使ってさらに具体的なものを定義して利用するということの理解が必要です。

基本的には自由に定義して使いますが、swiftでは便利な組み込みクラスがたくさん用意されているのでそれを利用することも多いです。自分で定義したクラス、事前に用意されあt組み込みクラスを利用してプログラムを組んでいきます。

一般的な定義で良いので大雑把に定義しておいてそれを利用して詳しく定義するということもできます。継承というものになります。

クラス定義

例えばということでクラスPersonを定義します。

class Person{
    var name:String
    var adress:String
    var age:Int
    
    init(name:String,adress:String,age:Int){
        self.name = name
        self.adress = adress
        self.age = age
    }

    func greet(){
        print("Hello")
    }
}

まず、"class"と宣言して次にクラス名を定義して"{ }"内にその内容を書いていきます。

まずクラスにはプロパティを書くことができます。プロパティと言っても何か分かりにくいですが、この定義したクラスがどんなものを持っているか、ここでは人間が持っていそうなもの、名前と住所と年齢をプロパティとして定義しています。

 var name:String
 var adress:String
 var age:Int

このプロパティには必ず実際の値を代入しないといけない"初期化"というルールがあるので、その基本的な初期化の方法を書いていきます。

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

初期化の命令は"init()"を使います。引数で

(name:String,adress:String,age:Int)

それぞれのプロパティを指定して入力を求めることになります。

クラスにはメソッドと呼ばれる機能を追加することができます。例えばこのクラスでは

 func greet(){
        print("Hello")
    }

というのをつけてみました。

それではクラスを使って具体化(インスタンス化)を作ってみます。

var taro = Person(name: "taro", adress: "japan", age: 20)

これで変数"taro"にクラスで定義したそれぞれのプロパティが代入されました。

確認してみます。

print(taro.name)
print(taro.adress)
print(taro.age)

taro
japan
20

と出力されます。"taro"という変数にPerson()で作ったデータについて使えるようになりました。

メソッドも試してみます。

taro.greet()

として実行すると

Hello

というように関数が実行できます。

継承

基本のクラスを引き継いで違うクラスを使って物事を表現することができます。

例えば先ほど作ったクラスで継承させて他のクラスを作ってみます。

Personクラス。名前と住所と年齢を定義しています。

class Person{
    var name:String
    var adress:String
    var age:Int
    
    init(name:String,adress:String,age:Int){
        self.name = name
        self.adress = adress
        self.age = age
    }
}

このクラスを継承して別クラスを作ります。形としては

class Family:Person{}

のようにクラス名の後に継承したいクラスを書きます。ここでは名字と家族の人数を定義しています。Personクラスで定義していることは再度定義しませんが新しいクラスにもPersonクラスで定義したことは引き継がれます。

class Family:Person{
    var familyName:String
    var menberCount:Int
    
    init(familyname:String,memberCount:Int){
        self.familyName = familyname
        self.menberCount = memberCount
        super.init(name: "はなこ", adress: "日本", age: 3)
    }
}

このときに引き継ぐデータの初期化が必要になります。

super.init(name: "はなこ", adress: "日本", age: 3)

super.init()を使って具体的に値を入れて定義しています。

使ってみます。

var hanako = Family(familyname: "本田", memberCount: 4)

print("はなこさんの名字は\(hanako.familyName)さん")
print("はなこさんの年齢は\(hanako.age)歳です")

実行すると

はなこさんの名字は本田さん
はなこさんの年齢は3歳です

と出力されます。新しいクラスを使って新しいものができました。

全体です。

class Person{
    var name:String
    var adress:String
    var age:Int
    
    init(name:String,adress:String,age:Int){
        self.name = name
        self.adress = adress
        self.age = age
    }
}



class Family:Person{
    var familyName:String
    var menberCount:Int
    
    init(familyname:String,memberCount:Int){
        self.familyName = familyname
        self.menberCount = memberCount
        super.init(name: "はなこ", adress: "日本", age: 3)
    }
}


var hanako = Family(familyname: "本田", memberCount: 4)

print("はなこさんの名字は\(hanako.familyName)さん")
print("はなこさんの年齢は\(hanako.age)歳です")


この記事が気に入ったらサポートをしてみませんか?