同じことをするために、遅延プロパティと関数を2つ作成しました。今はそののgreetLazyの値はが最初にアクセスされたときにのみ計算されるので、私がperson.greetLazyを使用してアクセスすると、それが意味すると思われるものがコンソールに表示されます。怠惰なプロパティとSwiftの関数3
私のここでの質問は関数の場合にも、私が関数にアクセスする場合にのみ値が返されます。それはあらかじめ計算されていません。では、その2つの違いは何でしょうか?
同じことをするために、遅延プロパティと関数を2つ作成しました。今はそののgreetLazyの値はが最初にアクセスされたときにのみ計算されるので、私がperson.greetLazyを使用してアクセスすると、それが意味すると思われるものがコンソールに表示されます。怠惰なプロパティとSwiftの関数3
私のここでの質問は関数の場合にも、私が関数にアクセスする場合にのみ値が返されます。それはあらかじめ計算されていません。では、その2つの違いは何でしょうか?
Swiftの遅延プロパティの完全名は遅延保存プロパティです。つまり、プロパティの値は、最初に必要なときに計算されるとすぐに保存されます。同じプロパティを再度参照すると、追加の計算は実行されません。
一方、関数の結果は、関数を呼び出すたびに計算されます。 "Computing func..."
が重複して印刷されている間、一度だけ"Computing property..."
印刷物の上
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())
:ここ
は、この点を示し、あなたの変更されたコードです。
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
は違いは、自明である、それはないですか?それは
Hello alpha
Hello beta
を印刷し
person.personName = "beta"
print(person.greetLazy)
print(person.greetFunc())
名を継続して変更することができますか
他の例は素晴らしいです:) –