Swift 覆盖函数不';行不通
我正在从一本书中学习swift,并键入了一个结构和类的示例。然而,这个例子并没有像它应该的那样工作,因为程序不会在每次调用僵尸时减少人口。我知道这是个愚蠢的问题,但我就是不明白为什么。谁能解释一下怎么了?下面是代码: 梅因·斯威夫特Swift 覆盖函数不';行不通,swift,overriding,Swift,Overriding,我正在从一本书中学习swift,并键入了一个结构和类的示例。然而,这个例子并没有像它应该的那样工作,因为程序不会在每次调用僵尸时减少人口。我知道这是个愚蠢的问题,但我就是不明白为什么。谁能解释一下怎么了?下面是代码: 梅因·斯威夫特 import Foundation var myTown = Town() myTown.changePopulation(by:500) let fredTheZombie = Zombie() fredTheZombie.town = myTown fred
import Foundation
var myTown = Town()
myTown.changePopulation(by:500)
let fredTheZombie = Zombie()
fredTheZombie.town = myTown
fredTheZombie.terrorizeTown()
fredTheZombie.town?.printDescription()
myTown.printDescription()
斯威夫特镇
import Foundation
struct Town {
var population = 5422
var numberOfStopLights = 4
func printDescription() {
print("Population: \(myTown.population), number of stoplights: \ . (myTown.numberOfStopLights).")
}
mutating func changePopulation(by amount: Int){
population += amount
}
}
怪物,斯威夫特
import Foundation
class Monster{
var town: Town?
var name = "Monster"
func terrorizeTown(){
if town != nil{
print("\(name) is terrorazing a town!")
}
else{
print("\(name) hasn't found a town to terrorize yet...")
}
}
}
僵尸,斯威夫特
import Foundation
class Zombie: Monster {
override func terrorizeTown() {
town?.changePopulation(by: -10)
super.terrorizeTown()
}
}
由于
城镇
是一个结构,当您将其分配给僵尸时,它将被复制。因此,fredTheZombie.terrorizeTown()
会恐吓myTown
的副本,因此myTown
会保留其值
您需要的是一个类,当您将其分配给怪物时,该类将通过引用进行传输——因此您只有一个城镇:
class Town {
var population = 5422
var numberOfStopLights = 4
func printDescription() {
print("Population: \(myTown.population), number of stoplights: \ . (myTown.numberOfStopLights).")
}
func changePopulation(by amount: Int){
population += amount
}
}
如果将Town从结构更改为类,它将起作用
每次指定结构时都会复制它,因此,当您放置zombie.town=myTown时,它不是同一个城镇,僵尸拥有城镇的副本,并且在更新僵尸的城镇时不会更改原始城镇。一节课会按照你期望的方式进行。谢谢!我尝试了所有我能想到的事情,但没有想到这一点。