swift構造体(Structures)とクラス(Class)の違い
同じ点:
異なる点(クラス固有):
初期化方法のないstructureとClassを構築するには:
struct Resolution {
var width = 0
var height = 0
}
///
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
この場合、ResolutionとVideoModeのインスタンスの作成方法は次のとおりです.
///Resolution
let someResolution = Resolution()
let otherResolution = Resolution(width: 12, height: 12)
///VideoMode
let someVideoMode = VideoMode()
初期化方法のあるstructureとClassを構築するには:
struct Resolution {
var width = 0
var height = 0
init(width: Int) {
self.width = width
}
}
///
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
init(frameRate: Double) {
self.frameRate = frameRate
}
}
この場合、ResolutionとVideoModeのインスタンスの作成方法は次のとおりです.
///Resolution
let otherResolution = Resolution(width: 12)
///VideoMode
let someVideoMode = VideoMode(frameRate: 2.0)
注意:
値タイプ-Structure
let hd = Resolution()
var hdDemo = hd
print("\(hd.height)--\(hdDemo.height)")
//hd:0--hdDemo:0
hdDemo.height = 100
print("hd:\(hd.height)--hdDemo:\(hdDemo.height)")
//hd:0--hdDemo:100
参照タイプ–Class
let video = VideoMode()
var videoDemo = video
print("\(video.name)--\(videoDemo.name)")
//nil--nil
videoDemo.name = "name1"
print("\(video.name)--\(videoDemo.name)--\(video === videoDemo)")
//Optional("name1")--Optional("name1")--true
このように、値タイプStructureは、インスタンスを渡すときに新しい変数にコピーされます.参照タイプClassは、インスタンスを渡すときにコピーをコピーするのではなく、既存のインスタンスを直接参照します.注意:1.let修飾の値タイプインスタンスを使用して、初期化後の属性値を変更することはできません.varはできます.2.swiftでは、整数、浮動小数点数、ブール値、文字列、配列、辞書ともに値タイプ
言叶の论理に不适切なところがあれば、指摘してください!!!感謝><