【swift-总结】结构体和类

来源:互联网 发布:分类信息网 软件 编辑:程序博客网 时间:2024/06/05 21:12

结构体

结构体是值传递类型

/***  结构体*/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 = 380res.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 = 20p3 = 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在发生赋值或者传入函数(或方法)时,不会发生值拷贝,而是传递已存在实例的引用。
0 0
原创粉丝点击