我想这很容易,但是我一直在搜索几个小时但仍然无法弄清楚我打算做什么功能。
所以说我有一个超类country
和三个像这样的子类
class country {
}
class USA : country {
}
class China : country {
}
class France : country {
}
var countrys : [country] = []
我现在想将所有子类推送到国家/地区类
的数组中我在追加函数中调用什么?
countrys.append(contentsOf: )
任何提示都表示赞赏! :d
答案 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]