ModelClass.swift
import UIKit
struct ModelStruct {
var a = 0
var b = 3
}
class ModelClass2: NSObject {
var modelStruct = ModelStruct()
var width:Int?
var height:Int?
struct ModelClass2Struct {
let a = 0
var b = 3
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
classFunc()
structFunc()
}
//TODO:类使用 (结论:类是引用类型)
func classFunc() {
//初始化
var mc2:ModelClass2 = ModelClass2()
var mc3 = ModelClass2()
//类的引用,改变被引用的类的参数值,而引用者可以是常量
let copyClass = ModelClass2()
copyClass.modelStruct = ModelStruct(a:100,b:200)
copyClass.width = 1234
copyClass.height = 4321
let copyClass2 = copyClass
copyClass2.width = 7788
//输出结果 copyClass2.width = copyClass.width = 7788
//判断两个类是否为同一类型,等价于
let b:Bool = (copyClass2 === copyClass) // b=true
let b2:Bool = copyClass !== copyClass2//对应的不等价于 b=false
}
//TODO:结构体 (结论:结构体、枚举值被传递时,是拷贝类型)
func structFunc(){
//初始化结构体
//成员逐一构造器
let ms = ModelStruct(a:10 , b:11)
var ms2 = ModelStruct()
ms2.a = 3 ; ms2.b = 4
//两个结构体赋值 (和类引用不一样,两个独立的内存空间,不会改变值)
var ms3 = ms2
ms3.a = 210
//输出结果 ms3.a=210 ; ms2.a=3
}
}
本文详细探讨了Swift中的类(Class)和结构体(Struct)的区别,以及如何判断两个类类型的实例是否等价。通过对ModelClass.swift的分析,揭示了在内存管理、继承、初始化和类型检查等方面的差异,并提供了实例代码以加深理解。
1270

被折叠的 条评论
为什么被折叠?



