Swift覚え書き(1)〜クラスの使い方〜
https://waarumstudy.blogspot.com/2018/08/swift.html
Appleの公式文書中のA Swift Tourを読んで理解できたクラス関連のことを書き留めました。今まで仕組みをわからずにやっていたことも多く、勉強になりました。
イニシャライザ(init)はクラスのインスタンスを作成する際に呼び出される特別なメソッド。プロパティの初期値を設定しなかった場合は必ずイニシャライザ内で代入する必要がある。代入は
クラスとは
関数と変数・定数をまとめて宣言するときの雛形のようなもの。あくまで雛形なので、クラスを作っただけでは使えない。var インスタンス名 = クラス名(引数名: 引数)
クラスの宣言の仕方
基本的にはプロパティ・メソッド・イニシャライザを書く。
class クラス名 {
var プロパティ名: 引数の型
var プロパティ名 = 初期値
func メソッド名(引数名: 引数) {
処理
}
init(引数名: 引数の型) {
インスタンス作成時の処理
}
}
プロパティは変数や定数に当たる。いくつあってもよく、変数なら初期値を設定するしないも自由。
メソッドは関数に当たる。これも数に制限はない。返り値がある場合、関数同様にreturnを使う。イニシャライザ(init)はクラスのインスタンスを作成する際に呼び出される特別なメソッド。プロパティの初期値を設定しなかった場合は必ずイニシャライザ内で代入する必要がある。代入は
self.プロパティ名 = 引数名
プロパティの高度な宣言法
ゲッターやセッターというメソッド?を使える。
class クラス名 {
var プロパティ名: プロパティの型 {
get {
return 別のプロパティを使った式
}
set {
変更したい別のプロパティ = 変更されたプロパティの値(newValue)を使った式
}
}
var 変更したい別のプロパティ: 別のプロパティの型
}
get内は別のプロパティの値が変更された時に呼ばれる。このプロパティの値を変更されたプロパティの値に応じて変更できる。
set内はこのプロパティの値が変更された時に呼び出される。このプロパティの新しい値に応じて別のプロパティの値を変更できる。インスタンスの操作
インスタンス名.プロパティ名
で各プロパティを呼び出して出力したり値を変更したりできる。
インスタンス名.メソッド名(引数名: 引数)
で各メソッドを呼び出して処理を行ったり戻り値を出力したりできる。
クラスの継承
継承とは、元になるクラスのプロパティとメソッドを引き継いだ新たなクラスを作ること。新たなクラスの中でだけ使える新しい変数やメソッドを作ることができる。また、元の関数のメソッドを書き換えることもできる。
class 子クラスの名前: 親クラスの名前 {
var 子クラスで新たに宣言する変数名
func 子クラスで新たに宣言する関数名() {
処理
}
override func 親クラスのメソッド名() {
書き換え後の処理
}
init() {
}
}
イニシャライザ内では親クラスのイニシャライザを
super.init()
で呼び出すことができる。superは継承元のクラスを表す。
インスタンスが作られるときの処理には3つの段階があり、以下の順番で行われる。
インスタンスが作られるときの処理には3つの段階があり、以下の順番で行われる。
- 子クラスのプロパティが宣言される。
- 親クラスのイニシャライザを呼び出す。
- 子クラスのプロパティの値を変更する。その他ゲッターやセッターを用いた設定が行われる。
また、親クラスのメソッドを書き換える際はoverrideをつけて同じ名前の関数を宣言すれば良い。
継承ではないが、クラス内で別のクラスのインスタンスを作ることも可能。
継承ではないが、クラス内で別のクラスのインスタンスを作ることも可能。