2016-10-29 20 views
0

私は11突然変異さの関数とプロパティ

struct Town { 
    var population: Int = 11 { 
     didSet(oldPopulation){ 
      print("The population has changed to \(population) from \(oldPopulation)") 
     } 
    } 
} 

の人口構造体タウン

を持っていると私は変異機能

mutating func changePopulation(amount: Int) { 
    population += amount  
} 

を持っています人口が10人減少する

final override func terrorizeTown() { 
    guard var town = town else { 
     return 
    } 
    town.population <= 0 ? print("no people to terrorize") : town.changePopulation(amount: -10) 

    super.terrorizeTown() 
} 

私はこれを実行すると、私は理解していない何main.swiftファイル

var myTown = Town() 
var fredTheZombie = Zombie() 
fredTheZombie.name = "Fred" 
fredTheZombie.town = myTown 

//myTown.changePopulation(amount: 0) 
print(myTown.population) 

fredTheZombie.terrorizeTown() 
print(myTown.population) 

が結果..です

11 
The population has changed to 1 from 11 
Fred is terrorizing a town! 
11 

なぜそれが私は再び(myTown.population)を印刷するときということです私はプロパティの変更関数を呼び出したときに11の値を受け取りますか?私は理解していない..結果が1でない場合、なぜ11を得るのですか?

答えて

1

あなたのTownオブジェクトのコピーという行があるためです。したがって、それは突然変異したコピーです。

+0

ちょっと明確にする。特に「ガード」ではありません。これは値の型を持つ任意の代入です( 'struct'は値の型です)。値を別の値に割り当てると、Swiftの値の型がコピーされます。 – rmaddy

+0

私が引用した行は、その現象の原因であり、したがって、「なぜ」の質問に答えます。 – matt

+0

私の説明は、OPや他の視聴者のためのものです。私はあなたがすでにそれを知っていると仮定しました。 – rmaddy

関連する問題