笔记摘要(九)Swift3.0之属性、方法

  • 存储属性

    • 当值类型的实例被声明为常量的时候,它的所有属性也就成了常量; 把一个引用类型的实例赋给一个常量后,仍然可以修改该实例的变量属性。
    • 在属性声明前使用lazy来标示一个延迟存储属性,延迟属性必须声明成变量。
    • 如果一个被标记为lazy的属性在没有初始化时就同时被多个线程访问,则无法保证该属性只会被初始化一次。
    • swift中的属性没有对应的实例变量,属性的后端存储也无法直接访问。
  • 计算属性

    • 类、结构体和枚举可以定义计算属性。计算属性不直接存储值,而是提供一个getter和一个可选的setter,来间接获取和设置其他属性或变量的值。
    • 如果计算属性的setter没有定义表示新值的参数名,则可以使用默认名称newValue
    • 只有getter没有setter的计算属性就是只读计算属性。只读计算属性总是返回一个值,可以通过点运算符访问,但不能设置新的值。
    • 必须使用var关键字定义计算属性,包括只读计算属性,因为他们的值不是固定的。let关键字只用来声明常量属性,表示初始化后再也无法修改的值。
  • 属性观察器

    • 监控和响应属性值的变化
    • willSet
      • 在新的值被设置之前调用
      • 可以为参数指定一个名称,如果不指定则使用默认名称newValue表示
    • didSet
      • 在新的值被设置之后立即调用
      • 可以为参数命名或者使用默认参数名oldValue
    • 如果将属性通过in-out方式传入函数,willSetdidSet也会调用。这是因为in-out参数采用了拷入拷出模式:即在函数内部使用的是参数的copy,函数结束后,又对参数重新赋值。
  • 全局变量和局部变量

    • 全局的常量或变量都是延迟计算的,跟延迟存储属性不同的地方在于,全局的常量或变量不需要标记lazy修饰符。
    • 局部范围的常量或变量从不延迟计算。
  • 类型属性

    • 在swift中,类型属性是作为类型定义的一部分写在类型最外层的花括号内,因此它的作用范围也就是类型支持的范围内。
    • 使用关键字static来定义类型属性。
    • 类型属性是通过类型本身来访问,而不是通过实例。

结构体和枚举能够定义方法是Swift与C/OC的主要区别之一。

  • 实例方法

    • 使用self属性来区分参数名称和属性名称。
    • 要使用可变方法,将关键字mutating放到方法的func关键字之前就可以了。
  • 类型方法

    • 实例方法是被某个类型的实例调用的方法。而在类型本身上调用的方法就叫类型方法。
    • 在方法的func关键字之前加上关键字static来指定类型方法。

你可能感兴趣的:(笔记摘要(九)Swift3.0之属性、方法)