我創建了2個東西,即一個懶惰屬性和一個函數來做同樣的事情。現在,它說,它的第一個訪問時greetLazy的價值纔會被計算,所以當我使用person.greetLazy訪問它,它打印到是應該的意思懶惰的consoleand多數民衆贊成。Swift 3中的懶惰屬性vs函數
我在這裏的問題是,在功能的情況下也值將只有當我訪問函數返回。它不會預先計算它。因此,這將是兩人在這種情況下,有什麼區別?
我創建了2個東西,即一個懶惰屬性和一個函數來做同樣的事情。現在,它說,它的第一個訪問時greetLazy的價值纔會被計算,所以當我使用person.greetLazy訪問它,它打印到是應該的意思懶惰的consoleand多數民衆贊成。Swift 3中的懶惰屬性vs函數
我在這裏的問題是,在功能的情況下也值將只有當我訪問函數返回。它不會預先計算它。因此,這將是兩人在這種情況下,有什麼區別?
Swift中懶惰屬性的全名是懶存儲屬性,這意味着只要第一次需要時就會計算屬性的值。當您再次引用同一個屬性沒有額外的計算進行。
函數的結果,另一方面,則在每次調用該函數的時間來計算。
下面是修改後的代碼演示了這一點:
struct Person {
var personName:String?
init(name:String) {
personName=name
}
lazy var greetLazy:String = {
print("Computing property...")
return "Hello \(self.personName!)"
}()
func greetFunc()->String
{
print("Computing function...")
return "Hello \(self.personName!)"
}
}
var person:Person=Person(name:"")
print(person.greetLazy)
print(person.greetFunc())
print(person.greetLazy)
print(person.greetFunc())
上面打印"Computing property..."
只有一次,而"Computing func..."
打印兩次。
struct Person
{
var personName:String?
init(name:String) {
personName=name
}
lazy var greetLazy:String =
{
return "Hello \(self.personName!)"
}()
func greetFunc()->String
{
return "Hello \(self.personName!)"
}
}
var person:Person=Person(name:"alpha")
print(person.greetLazy)
print(person.greetFunc())
打印
Hello alpha
Hello alpha
讓我們繼續並更改名稱
person.personName = "beta"
print(person.greetLazy)
print(person.greetFunc())
它打印
Hello alpha
Hello beta
的差異自我解釋的,不是嗎?
另一個例子是偉大的好友:) –