プロパティについてのまとめ
・プロパティ : 型に紐づいた値のこと
・プロパティの分類
①var,let
②ストアドプロパティ,コンピューテッドプロパティ
③インスタンスプロパティ,スタティックプロパティ,クラスプロパティ
①var,let
var : 再代入可
let : 再代入不可
②ストアドプロパティ,コンピューテッドプロパティ
・ストアドプロパティ(値を保持するプロパティ。プロパティオブザーバをもつ。)
struct Bird {
var status = "卵" {
willSet {
print("私は\(status)です。次は\(newValue)になります。")
}
didSet {
print("私は\(status)になりました。前は\(oldValue)です。")
}
}
func greet() {
print("私は\(status)です。")
}
}
var bird = Bird()
bird.greet() //私は卵です。
bird.status = "鳥"
bird.greet() // 私は卵です。次は鳥になります。私は鳥になりました。前は卵です。私は鳥です。
・コンピューテッドプロパティ(値を保持せずに算出するプロパティ)
struct Human {
var gender = "男"
var name : String {
get {
if gender == "男" {
return "太郎"
} else {
return "花子"
}
}
set {
if newValue == "太郎" {
gender = "男"
} else {
gender = "女"
}
}
}
func person() {
print("私は\(name)です。性別は\(gender)です。")
}
}
var human = Human()
human.person() // 私は太郎です。性別は男です。
human.gender = "女"
human.person() // 私は花子です。性別は女です。
③インスタンスプロパティ,スタティックプロパティ,クラスプロパティ
①インスタンスプロパティ(型のインスタンスに紐づくプロパティ)
struct Human {
var gender = "男"
}
var human = Human()
print(human.name) //山田太郎
②スタティックプロパティ・クラスプロパティ(型そのものに紐づく)
・スタティックプロパティについて
struct Animal1 {
//スタティックプロパティはストアドプロパティ・コンピューテッドプロパティとして利用できる。オーバーライドはできない。
static var weight : Int {
return 40
}
static var height: Int = 180
}
print(Animal1.weight) // 40
print(Animal1.height) // 180
・クラスプロパティについて
//クラスプロパティはコンピューテッドプロパティとして利用しなければならない。オーバーライド可能。
class Animal2 {
class var name : String {
return "Dog"
}
}
class Animal3: Animal2 {
override class var name: String {
return "Cat"
}
}
print(Animal2.name) //Dog
print(Animal3.name) //Cat
参考
・Swift実践入門