白癜风发病机制 https://m.39.net/news/a_6185486.htmlSwift变量与简单类型变量作用域变量可以被看成是一个类型明确的盒子。每个变量都必须要显式声明。在Swift文件结构中,变量可以在任何地方声明。全局变量:声明在Swift文件顶层的变量,其生命周期与文件一样长。属性:声明在对象类型声明(枚举、结构体或类)顶层的变量。局部变量:声明在函数体中的变量。其生命周期取决于外围花括号的生命周期,当进入花括号内并到达变量声明处时,产生局部变量;当处于花括号外的时候,局部变量就会消亡。变量声明变量是通过let或var声明的:let声明的变量是常量,在首次赋值后不可修改;var声明的变量后续可以被修改。但是变量的类型不能被修改,在声明变量的时候,要指定好类型。计算变量在给变量赋值的时候,函数setter会被调用。延迟初始化如果存储变量在声明时被赋予一个初始值,并且使用了延迟初始化,那么直到运行着的代码访问了该变量的值时才会计算初始值并完成赋值。在Swift中,有3种类型的变量可以做到延迟初始化:全局变量:当应用启动时,文件与顶层代码都会执行,这时初始化全局变量是没有意义的,因为应用甚至还没有运行。这样,全局初始化必须要延迟到后面某个有意义的时间点处。因此,全局变量初始化直到其他代码首次引用它们时才会发生。在底层,该行为是由dispatch_once保护的;这使得初始化只会执行一次并且是线程安全的。实例属性:在默认情况下,实例属性不是延迟初始化的,不过可以在声明中通过关键字lazy让它变成延迟初始化。该属性必须要通过var声明,而不是let。如果在代码获取属性值之前有其他代码对该属性赋值,那么属性的初始化器就永远都不会执行。静态属性:静态属性的行为非常类似于全局变量,并且也是出于相同的原因。(Swift中并没有存储类属性,因此类属性是无法初始化的,也不能做到延迟初始化。)延迟初始化器通常用于实现单例。单例是一种设计模式,所有代码都可以访问某个类的一个单独的共享实例。延迟实例属性不能拥有Setter观察者,并且也没有lazylet(因此无法将延迟实例属性设为只读)
转载请注明:http://www.aierlanlan.com/grrz/6670.html