swift:谈谈swift几种常见属性的区别

一、前奏

Swift作为一门新语言,经过几年的发展,逐渐趋于完善,目前已经更新到3.0版本,它汇集许多其他语言的特点,例如JS、Paython、C++等,完全区别于OC。个人感觉它没有完全的OOP和OOD的性质。

二、谈谈几种属性的区别

存储属性

定义:实实在在存储常量和变量的

计算属性

定义:依赖于存储属性,通过计算得出来,它提供getter访问值,提供setter方法间接给其他属性或者变量设置值

类属性

定义:其本质其实就是一个全局属性,在类里限定了其作用域,用关键字static(用于结构体和枚举中)或者class(用于类中)修饰

懒加载属性

定义:该属性在使用的时候初始化一次,用关键字lazy修饰,必须进行初始化,非实例属性懒加载时在大括号{}后面要加上()

全局属性

定义:类外面的属性,作用域全局。类似于OC的static修饰的属性

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        //实例属性
        let p = Person()
              //存储属性
        print(p.age)
        //懒加载属性
        print(p.name)
        //类属性
        print(Person.height)
        //计算属性
        print(p.getAge)
        //全局属性
        print(commonProperty)
    }
}
//全局属性
var commonProperty = {()->String in
    print("Common Property1")
    return "Common Property"
    }()//类型属性,此处struct也可以是enum枚举struct AnyStructure{     static var storedTypeProperty = "Some value"    static var computedTypeProperty:Int{       return 100   }}

class Person{
    //类属性
    class var height = {()->Int in
        print("Static Properties")
        return 170
    }()
    //存储属性
    var age = {()->Int in
        print("Store properties")
        return 26
    }()
    //计算属性
    var getAge:Int{
        get{
            print("Computed Properties")
            return age
        }
    }
  //懒加载属性
    lazy var name = {()->String in
        print("Lazy Properties")
        return "Lazy liyang"
    }()
    //构造方法
    init(){
        print("init")
    }
}

三、总结:基于类,类的构造

  • 存储属性,最先被初始化
  • 构造方法,仅次于存储属性调用,可以在这里对存储属性进行赋值
  • 懒加载属性、类属性、全局属性都是在第一次使用的时候初始化一次,以后调用都不在初始化
  • warning:当懒加载属性是基于一个存储属性计算的时候,切勿使用懒加载属性,采用计算属性

原文链接: https://www.cnblogs.com/XYQ-208910/p/6241592.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/246851

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午1:49
下一篇 2023年2月14日 上午1:50

相关推荐