Swift属性

作者: dongwenbo | 来源:发表于2016-12-30 16:34 被阅读44次

Swift属性分为存储属性,计算属性。或者分为实例属性,类属性。计算属性不存储值(像是一个计算方法),枚举没有存储属性

存储属性

存在于特定类或结构体实例(或者类和结构体中static修饰)中的一个值,可以是变量,也可以是常量,也可以有默认值,也可以没有
存储属性在构造完成后必须有值(除了可选类型),常量存储属性只能赋一次值
Swift中的属性就是属性(命名,类型,内存管理),没有对应的实例变量,没有后端存储

延迟存储属性

第一次使用的时候才去计算初始值,使用lazy关键字,而且一定是变量

class A {
    lazy var a = 1//内部采用可选类型实现
}
var a = A()//a.a为nil
print(a.a)//a.a为1

计算属性

类,结构体,枚举都可以定义计算属性。计算属性不存储值,提供一个必选getter和一个可选setter,来间接获取变量值,或者设置其他值,计算属性必须使用 var定义

class A {
    var a: Int {
        get {
            return self.a //死循环
        }
        set {
            self.a = newValue //死循环
        }
    }
}

newValue为默认参数名,通过set(hhd){},重新命名参数名,hhd为新参数名

class A {
    var a: Int {
        get {
            return 1
        }
        set(hhd){
            print(hhd)
        }
    }
}

var a = A()
a.a = 100
print(a.a)
  
只读计算属性

只有getter没有setter

class A {
    var a: Int {
        return 1//可以省略get
    }
}

属性观察器

值变化的时候可以监控,新值和当前值不同也会监控
延迟属性没有观察器,计算属性自带观察器
通过重写为继承的属性(计算,存储)添加观察器

  • willSet设置新值前调用
  • didSet设置新值后调用
class A {
    var a = 2{
        willSet{
            print("willSet newValue \(newValue)")//newValue是个常量
        }
        didSet{
            print("didSet oldValue \(oldValue)")//oldValue也是常量,可以对a再次赋值,这时不会触发观察器
        }
    }
 }

自定义参数名

class A {
    var a = 2{
        willSet(x){
            print("willSet newValue \(x)")
        }
        didSet(y){
            print("didSet oldValue \(y)")
        }
    }
 }

属性作为in-out参数传入函数,也会触发观察器

父类的属性在子类的构造器中被赋值时,它在父类中的 willSet
和 didSet 观察器会被调用,随后才会调用子类的观察器。在父类初始化方法调用之前,子类 给属性赋值时,观察器不会被调用 //不知道这句话到底什么意思”

全局变量和局部变量

全局:在函数、方法、闭包和任何类型之外定义
局部:函数、方法、闭包内定义
还可以分为 存储型变量 计算型变量 还可以定义属性观察器
全局的常量变量都是延迟计算,但是不需要lazy修饰
局部的不延迟

类型属性

就是属于类型的属性,所有实例共享
存储型类型属性可以是常量或变量,计算型类型属性只能是变量
存储型类型属性必须要有默认值,因为类中没有关于类的构造函数,存储型类型属性是延迟计算,不用 lazy

类型属性语法

使用关键字static,计算型类型属性,可以改用class来支持子类对父类的实现进行重写

获取和设置类型属性的值

通过类名访问,不能通过实例访问

相关文章

  • Swift笔记(一)属性、析构、调用OC单例

    目录 swift属性存储属性懒加载属性计算属性属性监听类型属性 swift析构函数 swift调用OC单例类方法 ...

  • Swift 属性

    Swift 属性 在Swift中属性主要分为存储属性、计算属性、延迟存储属性、类型属性这四种,并且Swift还提供...

  • Swift进阶(三)--- 属性

    Swift的属性 在swift中,属性主要分为以下几种: 存储属性 计算属性 延迟存储属性 类型属性 一:存储属性...

  • 浅谈 Swift 中的属性(Property)

    Properties in Swift 前言 Swift 中的属性分为存储属性与计算属性,存储属性即为我们平时常用...

  • Swift:基础(二十)属性

    Swift 属性 Swift 属性将值跟特定的类、结构或枚举关联。 属性可分为存储属性和计算属性: 存储属性和计算...

  • SwiftProperty Swift3.0 属性

    Swift Peoperty Swift中有下列几种属性存储属性(Stored properties):存储实例的...

  • OC的@property与Swift的存储属性/计算属性类比

    Swift中的计算属性/存储属性与OC中的@property   Swift中引入了存储属性、计算属性的概念,存储...

  • Swift 学习笔记(三)

    Swift属性 Swift属性将值跟特定的类,结构体,枚举关联。分为存储属性和计算属性,通常用于特定类型的实例。属...

  • Swift学习-进阶02

    swift对象本质,一个swift的对象默认占用16字节大小,在内存中的结构: swift类结构: 属性 存储属性...

  • Swift5.x- 方法(中文文档)

    引言 继续学习Swift文档,从上一章节:属性,我们学习了Swift属性相关的内容,如存储属性和计算属性set和g...

网友评论

    本文标题:Swift属性

    本文链接:https://www.haomeiwen.com/subject/jcymvttx.html