Swiftクラスと構造体(Class And Structure)
3055 ワード
1.公式の説明クラスと構造体の違いを見てみましょう。
Classes and structures in Swift have many things in common. Both can:(同じ点)
注:構造は、参照カウントを使用せずにコードで渡されると常にコピーされます.
2.クラスは参照タイプ、構造体は値タイプ
構造体とクラスの宣言
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
let someResolution = Resolution()
let someResolution2 = Resolution(width: 29, height: 19)
let somVideoMode = VideoMode()
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema
のwidth
が変更され、hd
のwidth
は変更されず、cinemaが現在の値を与えるとhdは、その中に格納された値hdが新しいcinemaインスタンスにコピーされる.最終的な結果は、2つの完全に分離する例であり、それらはちょうど同じ数値を含む.この状況はすべての値タイプ、列挙、辞書、配列に適しています...cinema.width = 2048
print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"
print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"
VideoMode
クラスlet tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
次に、
tenEighty
は新しい定数を割り当てられ、alsoTenEighty
が呼び出され、alsoTenEighty
はframeRate
を変更する.let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
tenEightyのframeRateプロパティは、参照タイプである30.0のままです.
print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// Prints "The frameRate property of tenEighty is now 30.0"