LoginSignup
2

More than 5 years have passed since last update.

プロパティまとめ

Posted at

勉強したことメモ

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 ここで初めて呼ばれる

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2