1.初始化方法的不同
Struct会有一个默认的初始化函数
struct Point {
var x :Int
var y : Int
}
Class不同,必须手动实现一个初始化函数
//报错
//class PointRef{
// var x :Int
// var y :Int
//}
class PointRef{
var x :Int
var y :Int
init(x:Int,y:Int){
self.x = x
self.y = y
}
}
2.Class 和 Struct在let常量上的不同
Class的常量可以修改属性值,而Struct不可以
let p = Point(x: 1,y:2)
let p2 = PointRef(x: 2,y:3)
let p3 = PointRef(x: 2,y:3)
let p4 = p2
//p.x = 1 //报错
p2.x = 2 //不会报错
//p2 = p3 //报错
3.Swift为Class提供了一个指针判断的操作符 ===
判断两个指针是否指向相同的对象
p2 === p3
p2 === p4
4.Struct和Class在函数声明上的不同
Struct在函数中修改自己本身的值需要加上mutating关键字
struct Point {
var x :Int
var y : Int
//报错
// func move(x:Int,y:Int){
// self.x += x
// self.y += y
// }
mutating func move(x:Int,y:Int){
self.x += x
self.y += y
}
}
在class中可以直接修改
class PointRef{
var x :Int
var y :Int
init(x:Int,y:Int){
self.x = x
self.y = y
}
func move(x:Int,y:Int){
self.x += x
self.y += y
}
}
5.赋值语义上的区别
间接修改属性的值,struct并不会影响原始数据本身,因为Struct是值类型,每次赋值都是一次值拷贝
var p5 = p2
p5.x = 10
p2.x //10
而class不同,每一次赋值都是只赋值指针本身,而不是重新创建一个新的内存区域
var p6 = p
p6.x = 10
p.x //1
网友评论