2016-03-16 25 views
1

在雨燕編程語言248頁的說明(SWIFT 2.1)解釋如下:如果全局屬性總是懶洋洋地計算出來,而且本地屬性永遠不會,那麼懶惰修飾符會修改什麼?

全局常量和變量總是懶洋洋地計算,以類似的方式來存儲懶屬性。與惰性存儲屬性不同,全局常量和變量不需要使用惰性修飾符進行標記。

本地常量和變量永遠不會被延遲計算。

摘自:蘋果公司「雨燕編程語言(雨燕2.1)」 https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11

是否有其他類型的固定或可變除了全局屬性和本地值,其中lazy修改將有一個影響?

回答

2

提供摘錄中的「局部常量和變量」是指局部作用域常量和變量,就像函數的局部變量一樣。它們不會引用對象的屬性,如果它們使用lazy關鍵字進行標記,則這些屬性可能是懶惰的。

//global, declared outside of a class/struct 
//error is "Lazy is only valid for members of a struct or class 
lazy var label: UILabel = { 
    var tempLabel: UILabel = UILabel() 
    tempLabel.text = "hi" 
    return tempLabel 
}() 

class SomeClass : NSObject { 
    //non-lazy instance property 
    var x = 3 

    //lazy instance property 
    lazy var label: UILabel = { 
     var tempLabel: UILabel = UILabel() 
     tempLabel.text = "hi" 
     return tempLabel 
    }() 


    func doStuff() { 
     //error is "Lazy is only valid for members of a struct or class 
     lazy var label: UILabel = { 
      var tempLabel: UILabel = UILabel() 
      tempLabel.text = "hi" 
      return tempLabel 
     }() 
    } 
} 
+0

是什麼對象的屬性和「全局常量和變量」之間的區別? – grossmae

+0

@grossmae我的編輯與例子清除差異? –

+1

@grossmae對不起,我仍然在編輯。你可以擁有全局變量,在你的類之外聲明,總是很懶。你可以在你的類上有靜態的,這些都是懶惰的,你可以在你的方法中有局部變量,這些變量永遠不會懶惰,也不可能,你可以擁有可以懶惰或不可以的實例屬性。 –

0

全球這裏指的是變量和常量聲明外的類括號{ }例如

var anotherProerty : AClass() //This will be lazy by default 

Class Abc 
    { 
     var aProperty : AClass() // This will NOT be lazy by default 
     //however it can be lazy by declaring it with 'lazy' KEYWORD 

     func abc() 
     { 
      var another: AClass() //This cannot be lazy 
     } 


    }