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:當懶加載屬性是基於一個存儲屬性計算的時候,切勿使用懶加載屬性,采用計算屬性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM