从superClass调用所有子类的函数

时间:2017-02-12 04:58:55

标签: swift function

我想这很容易,但是我一直在搜索几个小时但仍然无法弄清楚我打算做什么功能。

所以说我有一个超类country和三个像这样的子类

class country {
}

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

我现在想将所有子类推送到国家/地区类

的数组中

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

countrys.append(contentsOf:  )

任何提示都表示赞赏! :d

2 个答案:

答案 0 :(得分:2)

您希望在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的子类。

答案 1 :(得分:1)

不需要,期望或需要目标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]