見出し画像

プログラミングを始める。 - struct!(構造体)

structはclassと同じようにデータをまとめることができるものです。

でも、使うようと、機能が違うのでちょっと気をつける必要があります。簡単に違いをあげるとstructは値型、classは参照型であり、structは継承できないけど、classはできるなど。

を参考にコードを書いていきます。

基本的な構造はstructもclassも同じ感じで組むことができます。

struct 型名{
変数
イニシャライザ
メソッドなど
}

イニシャライザというのは初期化、初期値を決めるための手続きです。

実際のコードで、例えば、構造体ごとに定義できる構造体(カスタムイニシャライザ)は

struct SimpleData{
   var year:Int
   var month:Int
   var day:Int
}

となります。このコードを初期化済みのものにすると

struct SimpleData{
   var year = 2020
   var month = 5
   var day = 24
}

となり、これを実際の使うとすぐに使えます。既定イニシャライザと言います。

var aDay = SimpleData()
print(aDay.month)

とすると"5"が出力されます。

イニシャライズする方法としては一度に全てのプロパティを初期化していまう方法があります。全項目イニシャライザという方法があります。

var aDay = SimpleData(year: 2020,month: 5,day: 24)
print(aDay.year)

とすると、"2020"と出力されます。

カスタムイニシャライザですが、

struct SimpleData{
   var year,month,day:Int
   init() {
       self.year = 2020
       self.month = 5
       self.day = 24
   }
}

var aDay = SimpleData()

print(aDay.day)

として使うこともできます。

また、"init()"の部分を引数にして、

struct SimpleData{
   var year,month,day:Int
   init(year:Int,month:Int,day:Int) {
       self.year = year
       self.month = month
       self.day = day
   }
}

var aDay = SimpleData(year: 2020, month: 5, day: 24)

print(aDay.day)

として、使うこともできます。

最後に付属型です。構造体の中でも定義することができます。ネスト型の定義となります。

struct SimpleTime {
   var hour, min: Int
   init(_ hour:Int, _ min:Int) {
       self.hour = hour
       self.min = min
   }
}
struct PointOfTime {
   struct Date { var year, month, day: Int }    // ネスト型
   typealias Time = SimpleTime                  // 別名を定義
   var date: Date
   var time: Time
   init(year:Int, month:Int, day:Int, hour:Int, min:Int) {
       date = Date(year:year, month:month, day:day)
       time = Time(hour, min)
   }
}
struct Date { var year, month, day: Int } 
typealias Time = SimpleTime

"struct Date"を定義して"Time"として使っています。

その他、以下参考になると思います。structは値型、classは参照型などわかりやすく解説してあります。


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