swift - 从父类(super class)访问子类函数

标签 swift inheritance subclass superclass

有没有办法从父类(super class)访问子类方法? switch 语句位于父类(super class)的函数中。函数 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
        } 

最佳答案

你不能直接从父类(super class)访问子类方法,因为父类(super class)不知道它自己的子类的任何信息。

尽管如此,您始终可以尝试将事物转换为 Swift 中的事物,以获得其他类的功能。

看一下这个例子。这是非常基本和简单的,但我希望你能明白。

想象一下你有一个城市类:

class City {
    func build() {
        print("city is building")
}

它是 Town 的子类:

class Town: City {
    func buildTown() {
        print("town is building")
    }
}

现在您希望从 City 类访问 Town 的 buildTown() 函数。因为 Town 始终是 City 因为它是子类,所以您可以创建如下内容:

class City {
    func build() {
        print("city is building")
    }

    func buildAnything() {
        if self is Town {
            (self as! Town).buildTown()
        }
    }
}

现在我并不是说您真的想要创建这样的东西,因为您以这种方式将子类的逻辑公开给父类(super class)。因此,解决此问题的一个好方法是仅创建一个 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 .

关于swift - 从父类(super class)访问子类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50167840/

相关文章:

c++ - 引用父类(super class)中的子类 (C++)

ios - swift ,Alamofire.framework : No such file or directory

swift - 在 Picker 中对齐 View

ios - 在具有附加功能的同一应用程序中使用 ViewController 的副本

dart - 在 Dart 中,如何从另一个文件中的子类访问父私有(private) var?

matlab - 设置子类属性导致意外错误

swift - 如何给 UITableview 添加二级标签

Javascript 继承调用行为

c++ - 在这里运行时出现奇怪的错误

c# - 在派生类中隐藏基类的公共(public)属性