从超类调用所有子类的函数



我想这很简单,但我已经搜索了几个小时,仍然无法弄清楚我调用什么函数来执行此操作。

所以假设我有一个超类country和三个这样的子类

class country {
}
class USA : country {
}
class China : country {
}
class France : country {
}
var countrys : [country] = []

我现在想将所有子类推入一系列国家/地区类

我在追加函数中调用什么?

countrys.append(contentsOf:  )

任何提示都值得赞赏! :D

你想做的事情可以在Objective-C中使用内省,而在C++中使用在程序开始时运行的静态代码。但是,这在 Swift 中是不可能的。

虽然您无法自动获得某些事情,但手动方法将起作用。

定义类,如下所示:

class Country {
    static var countries = [Country.Type]()
    static func addMe() { Country.countries.append(self) }
}
class USA : Country {
}
class China : Country {
}
class France : Country {
}

在某些初始化代码调用中:

USA.addMe()
France.addMe()
China.addMe()

然后打电话给print("Country.countries (Country.countries)")会给你:

Country.countries [Module.USA, Module.France, Module.China]

如果这真的需要自动完成,请查看您可以在 Objective-C 中做什么,并Country成为 NSObject 的子类。

不需要、不需要或不需要目标 C。 您可以以尽可能小的方式创建这样的Country数组,具体取决于它们是只读的还是读写的。

class Country {}
class USA: Country {}
class China: Country {}
class France: Country {}
var countries = [Country]()
countries.append(USA())
countries.append(China())
countries.append(France())
let moreCountries = [France(), China(), USA()]

但是,为每个可能的国家/地区创建单独的子类型是对类型系统的表面值的误用。这是一个更惯用的替代答案。但这是一个设计问题,取决于未提供的细节。

class Country {
   let name: String
}
var countries = [Country]()
countries.append(Country(name: "USA"))
countries.append(Country(name: "China"))
countries.append(Country(name: "France"))
let moreCountries = [Country(name: "France"), Country(name: "China"), Country(name: "USA"))
let usa = Country(name: "USA")
let china = Country(name: "China")
let france = Country(name: "France")
let evenMoreCountries = [china, france, usa]

最新更新