Swift计算属性和存储属性

2020-04-08 16:03:53 浏览数 (1)

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新手新司机开始上路了

0 人点赞