swift的副本.png
代码片段示例
声明变量一
代码语言:javascript复制 var arr1:[Int] = {
return [1,2,3];
}()
声明变量二
代码语言:javascript复制 var arr2:[Int] {
return [1,2,3];
}
声明变量三
代码语言:javascript复制 var arr3:[Int] {
get {
return [1,2,3];
}
}
声明变量四
代码语言:javascript复制 var arr4:[Int] {
get {
return [1];
}
set {
print(newValue);
}
}
以上为声明属性的几个方式,其中:1和2 两种方式在一些第三方库代码中经常性出现。
解读
1、声明一个存储属性,通过闭包运算赋值。 2、3 作用相同,2是3 的简化形式。声明一个计算属性。只读。 4、声明一个计算属性,可读可写。
由此看出,存储属性可以直接读写赋值。计算属性不能直接对其操作,其本身只起计算作用
,没有具体的值。
存储属性和计算属性比较
- 1 .计算属性可以用于类、结构体和枚举,存储属性只能用于类和结构体。
- 2.存储属性可以是变量存储属性(用关键字 var 定义),也可以是常量存储属性(用关键字 let 定义)。计算属性只能(用关键字 var 定义)。
- 3.计算属性不直接存储值,而是提供一个 getter 和一个可 选的 setter,来间接获取和设置其他属性或变量的值。
- 4.可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重写属性的方式为继承的属性(包括 存储属性和计算属性)添加属性观察器。你不必为非重写的计算属性添加属性观察器,因为可以通过它的 setter 直接监控和响应值的变化。
由此可见Swift的属性和Object-c的属性区别还是挺大的,Object-c属性会有对应的setter 、 getter 方法、对应的实例变量而Swift的属性确没了这些功能。
一步一个脚印,Swift新手新司机开始上路了