勉強したことメモ
Stored Property
StoredProperty
struct BaseballPlayer {
let fullName: String
let position: String
}
var player = BaseballPlayer(fullName: "Yamada Taro", position: "Catcher")
player.fullName // "Yamada Taro"
player.jobtitle // "Baseball Player"
Computed Property
計算してプロパティに値を入れる。
homeRundsの値が変わるとsalaryも変わるのでvarで宣言しなければならない。
ComputedProperty
struct BaseballPlayer {
let fullName: String
let position: String
var homeRuns: Int
//給与 = ホームラン数 * 1,000,000
var salary: Int {
return homeRuns * 1_000_000
}
}
var player = BaseballPlayer(fullName: "Yamada Taro", position: "Catcher", homeRuns: 50)
player.salary // 50,000,000
player.homeRuns = 20
player.salary // 20,000,000
Type Property
インスタンスからアクセスできない。
型そのものからはアクセス可能。
どこからでも同じ値が呼び出せる。
TypeProperty
struct ExampleStructure {
static var typeProperty = 1
var value = 2
var anotherValue = 3
}
let exampleStructure = ExampleStructure()
exampleStructure.value // Static member 'typeProperty' cannot be used on instance of type 'ExampleStructure'
exampleStructure.anotherValue // 2
exampleStructure.typeProperty // 3
ExampleStructure.typeProperty // 1
didSet/willSet
値がセットされた時/される前に処理が呼び出される。
初期化処理では呼び出されない。
didSetはnewValueを持たない。(didSet/willSet各処理からその値を呼び出せる)didSetはセットされた値がnewValue。
willSetはその逆でoldValueを持たない。
*値=currentNumber
getter/setter: computed property
didSet/willSet: stored property
didSet/willSet
struct Battery {
var lowBattery: Bool {
willSet {
if newValue == true {
print("Please charge !!")
}
}
}
var capableOfBattery = 100 {
didSet {
switch capableOfBattery {
case 0...20:
lowBattery = true
case 30...100:
lowBattery = false
default:
lowBattery = false
}
}
}
}
var battery = Battery(lowBattery: false, capableOfBattery: 100)
battery.capableOfBattery = 10 // Please charge !!
Lazy property
値(lazy property)がアクセスされた時だけ呼び出される。
初期化処理では呼ばれない。
処理時間がかかるものはlazyにしてアクセスする時だけ呼び出すようにするといいみたい。
LazyProperty
struct LazyAction {
lazy var comment = {
return "Too lazy"
}()
}
var lazyAction = LazyAction() // まだcommentに値はセットされていない
print(lazyAction.comment) // Too lazy ここで初めて呼ばれる