有没有办法从超类访问子类方法? switch语句位于超类中的函数中。函数createCityOne(),createCityTwo()和createCityThree()等各自都在它们自己的子类中。
if transitionSprite.name == nil || transitionSprite.name == "rd-d2c" || transitionSprite.name == "rd-f2c" || transitionSprite.name == "rd-c2c" {
print("city should come next")
switch randomIndex {
case 0:
cityOne.createCityOne()
print("1")
case 1:
cityTwo.createCityTwo()
print("2")
case 2:
print("3")
cityThree.createCityThree()
default:
break
}
答案 0 :(得分:0)
超类根本不应该知道任何子类。它当然不应该知道特定于子类的函数。
你应该做的是在超类上声明一个createCity
函数。然后每个子类都应该重写此函数以执行子类需要执行的任何操作。
然后你的代码很简单:
if transitionSprite.name == nil || transitionSprite.name == "rd-d2c" || transitionSprite.name == "rd-f2c" || transitionSprite.name == "rd-c2c" {
print("city should come next")
switch randomIndex {
case 0:
cityOne.createCity()
print("1")
case 1:
cityTwo.createCity()
print("2")
case 2:
print("3")
cityThree.createCity()
default:
break
}
答案 1 :(得分:0)
您不能直接从超类访问子类方法,因为超类对它自己的子类一无所知。
尽管如此,你总是可以尝试在Swift中使用东西来获取其他类的功能。
看看这个例子。这是非常基本和简单的,但我希望你明白这一点。
所以想象你有一个班级城市:
class City {
func build() {
print("city is building")
}
它是城镇的子类:
class Town: City {
func buildTown() {
print("town is building")
}
}
现在,您希望可以从buildTown()
课程访问Town的City
函数。因为Town
始终是City
,因为它的子类可以创建如下内容:
class City {
func build() {
print("city is building")
}
func buildAnything() {
if self is Town {
(self as! Town).buildTown()
}
}
}
现在我并不是说你真的想要创建这样的东西,因为你将子类的逻辑暴露给超类。因此,解决此问题的一个好方法是只创建一个build()
函数,然后重写它。
class City {
func build() {
print("city is building")
}
}
class Town: City {
override func build() {
print("town is building")
}
}
结果,您可以从所需的任何City子类访问相同的函数并自定义行为。
let myTown = Town()
let myCity = City()
myCity.build() //prints "city is building"
myTown.build() //prints "town is building"
好的解决方案总是取决于您的确切目标,因此请始终查看语言提供的许多选项。有关继承的更多信息here。