【swift-总结】结构体和类

结构体

结构体是值传递类型


/**
*  结构体
*/
struct Resolution {
    var width = 0
    var height = 0
}

//把结构体的值赋值给一个常量
let resol = Resolution(width: 320, height: 480)

//这句话会报错,因为resol是常量,所以里面的值不能修改,这就是值类型
resol.width = 20

//初始化结构体的时候要保证里面所有属性都有值
var res = Resolution(width: 320, height: 480)

//如果属性有默认值的话可以这样初始化
res = Resolution()

//因为结构体是值类型,所以这句话是拷贝,不是引用
var anotherRes = res

//修改anotherRes的属性不会改变res的属性值
anotherRes.width = 380
res.width

/**
*  Person类有默认初始值
*/
class Person {
    var name = "ttf"
    var age = 22
}

//初始化
var p1 = Person()

//因为类是引用传递,所以p2和p1是同一个对象
var p2 = p1

//改变p2属性的值也会改变p1的属性值
p2.name = "fft"
p1.name

//若果把类对象付给一个常量指针,还是可以改变里面的属性
//可以把p3看成是一个指针,他不能再指向别的对象
let p3 = Person()
p3.age = 20
p3 = p2//错误,不能让p3指向别的对象

//===判断两个对象是不是同一个对象
//==判断两个对象的值是否相等
//!==判断两个对象是不相等
if(p1 === p2) {
    print("相等")
}

什么时候用结构体

官方给出几个建议

  1. 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
  2. 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
  3. 三维坐标系内一点,封装x,y和z属性,三者均为Double类型。

集合类型的值传递问题

Swift 中字符串(String),数组(Array)和字典(Dictionary)类型均以结构体的形式实现。这意味着StringArray,Dictionary类型数据被赋值给新的常量(或变量),或者被传入函数(或方法)中时,它们的值会发生拷贝行为(值传递方式)。
Objective-C中字符串(NSString),数组(NSArray)和字典(NSDictionary)类型均以类的形式实现,这与Swfit中以值传递方式是不同的。NSStringNSArrayNSDictionary在发生赋值或者传入函数(或方法)时,不会发生值拷贝,而是传递已存在实例的引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值