LoginSignup
3
4

More than 5 years have passed since last update.

swift3.0 プロパティの種類

Posted at

プロパティの種類

  • インスタンスプロパティ
    • ストアプロパティ
      • 変数ストアプロパティ
      • 定数ストアプロパティ
      • 遅延ストプロパティ
    • コンピュテッドプロパティ
      • Read-Onlyコンピュテッドプロパティ
  • 型プロパティ
    • ストアプロパティ
    • コンピュテッドプロパティ

ストアプロパティ:値を格納するプロパティ

var varStored: String = “Hello"
let letStored: Int = 1

変数ストアプロパティ:再代入可能な値を保持するプロパティ

定数ストアプロパティ:再代入が出来ない、宣言時の値を保持するプロパティ

遅延ストアプロパティ:参照される際に初めて初期値が設定されるプロパティ

class File {
    var name = “data.txt"
}

class Storage {
    lazy var file = File()  //遅延ストアプロパティ
    var data = [String]()
}

let storage = Storage() //まだstorage.fileは生成されない
storage.data.append(“some data”) //まだstorage.fileは生成されない
print(storage.file.name) //参照されて初めて値が設定される

コンピュテッドプロパティ:値を計算するプロパティ

var greeting: String = “Hello"
var computed: String {
    //プロパティを参照する際に実行して値を返す。
    get {
        return greeting
    }
    //プロパティに値を設定した時に実行される。
    set(newValue) {     //(newValue)はデフォルトで使用されるため、宣言時の省略が可能
        greeting = newValue
    }
}

Read-Onlyコンピュテッドプロパティ:読み取り専用のプロパティで常に値を返す

struct ViewSize {
    var width = 0.0, height = 0.0
    var size: CGSize {
        return CGSize(width: width, height: height)
    }
}

let newViewSize = ViewSize(width: 3.0, height: 5.0)
print(“view size is \(newViewSize.size)”)  // "view size is 15.0"

ストアプロパティはclassとstructureで利用出来る一方、コンピュテッドプロパティではclassとstructureとenumで利用することが出来る。

プロパティオブザーバ

class HeightManager {
    var height: Double = 100.0 {
        //値がセットされる前に実行される(newValueはこれからセットする値)
        willSet {
            print(“身長が\(height)cmから\(newValue)cmになりました。")
        }
        //値をセットした後に実行される(oldValueは元の値)
        didSet {
            print("変更分は\(height - oldValue)cmです。")
        }
    }
}

let manager = HeightManager()
manager.height = 160.0
// 身長が100.0cmから160.0cmになりました。
// 変更分は60.0cmです。

インスタンスプロパティと型プロパティ

・インスタンスプロパティ:値がインスタンスに付随しているので、基本的に新しい新スタンスが生成される度に複製される。
・型プロパティ:値が型自身に付随しているので、何個インスタンスが生成されようが、実体は常に一つしか存在しない。

参考

https://www.slideshare.net/hasegawatomoki/swift-45247767
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254

3
4
0

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
3
4