美文网首页Swift
Swift----类型属性

Swift----类型属性

作者: Leo_L | 来源:发表于2019-08-23 11:06 被阅读0次

    类型属性

    实例属性属于一个特定类型的实例,每创建一个实例,实例都拥有属于自己的一套属性值,实例之间的属性相互独立。
    你也可以为类型本身定义属性,无论创建了多少个该类型的实例,这些属性都只有唯一一份。这种属性就是类型属性。
    类型属性用于定义某个类型所有实例共享的数据,比如所有实例都能用的一个常量(就像 C 语言中的静态常量),或者所有实例都能访问的一个变量(就像 C 语言中的静态变量)。
    存储型类型属性可以是变量或常量,计算型类型属性跟实例的计算型属性一样只能定义成变量属性。

    注意
    跟实例的存储型属性不同,必须给存储型类型属性指定默认值,因为类型本身没有构造器,也就无法在初始化过程中使用构造器给类型属性赋值。
    存储型类型属性是延迟初始化的,它们只有在第一次被访问的时候才会被初始化。即使它们被多个线程同时访问,系统也保证只会对其进行一次初始化,并且不需要对其使用 lazy 修饰符。

    类型属性语法

    CObjective-C 中,与某个类型关联的静态常量和静态变量,是作为global(全局)静态变量定义的。但是在 Swift 中,类型属性是作为类型定义的一部分写在类型最外层的花括号内,因此它的作用范围也就在类型支持的范围内。
    使用关键字 static 来定义类型属性。在为类定义计算型类型属性时,可以改用关键字 class 来支持子类对父类的实现进行重写。下面的例子演示了存储型和计算型类型属性的语法:

    struct SomeStructure {
        static var storedTypeProperty = "Some value."
        static var computedTypeProperty: Int {
            return 1
        }
    }
    enum SomeEnumeration {
        static var storedTypeProperty = "Some value."
        static var computedTypeProperty: Int {
            return 6
        }
    }
    class SomeClass {
        static var storedTypeProperty = "Some value."
        static var computedTypeProperty: Int {
            return 27
        }
        class var overrideableComputedTypeProperty: Int {
            return 107
        }
    }
    

    获取和设置类型属性的值

    print(SomeStructure.storedTypeProperty)
    // 打印“Some value.”
    SomeStructure.storedTypeProperty = "Another value."
    print(SomeStructure.storedTypeProperty)
    // 打印“Another value.”
    print(SomeEnumeration.computedTypeProperty)
    // 打印“6”
    print(SomeClass.computedTypeProperty)
    // 打印“27”
    

    类型属性与非类型属性的区别

    给上例中结构体SomeStructure增加一个常量存储属性

    struct SomeStructure {
        let commonProperty: NSString = "commonProperty"
        static var storedTypeProperty = "Some value."
        static var computedTypeProperty: Int {
            return 1
        }
        
    }
    

    类型属性调用

    print(SomeStructure.storedTypeProperty)
    

    非类型属性调用

    let someStructure = SomeStructure.init()
    print(someStructure.commonProperty)
    

    实例属性属于一个特定类型的实例,每创建一个实例,实例都拥有属于自己的一套属性值,实例之间的属性相互独立。
    创建两个上述例子的实例:

    let someStructure = SomeStructure.init()
    let someStructure1 = SomeStructure.init()
    

    实例someStructuresomeStructure1的中的类型属性storedTypeProperty,computedTypeProperty是独立的,是只属于它们自己的,因为它们是独立的所以是不能使用实例去调用结构体的类型属性,否则会报错

    101946F5-9F57-4068-8B63-E9FB3921BCC7.png

    属性学习可参照属性-SwiftGG

    相关文章

      网友评论

        本文标题:Swift----类型属性

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