您的位置:首页 > 移动开发 > Swift

【swift-总结】结构体和类

2015-07-02 19:37 274 查看

结构体

结构体是值传递类型

/**
*  结构体
*/
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("相等")
}


什么时候用结构体

官方给出几个建议

几何形状的大小,封装一个width属性和height属性,两者均为Double类型。

一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。

三维坐标系内一点,封装x,y和z属性,三者均为Double类型。

集合类型的值传递问题

Swift 中字符串(String),数组(Array)和字典(Dictionary)类型均以结构体的形式实现。这意味着String,Array,Dictionary类型数据被赋值给新的常量(或变量),或者被传入函数(或方法)中时,它们的值会发生拷贝行为(值传递方式)。


Objective-C中字符串(NSString),数组(NSArray)和字典(NSDictionary)类型均以类的形式实现,这与Swfit中以值传递方式是不同的。NSString,NSArray,NSDictionary在发生赋值或者传入函数(或方法)时,不会发生值拷贝,而是传递已存在实例的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: