在Swift中,我知道类型本身就是类,但是我很难做到这一点。
我正在尝试创建一个“工厂”,其中有一个Array
类型,每种类型都符合协议(因此实际上是协议的Array
),该类型指定静态的“工厂”功能。
这将允许我将一组类与一个实例相关联,以便该实例可以在“工厂”中循环,并实例化与该实例相关联的类。
这是我的意思:
protocol A {
static func makeAStat() -> A
func makeADyn() -> A
}
struct APrime: A {
static func makeAStat() -> A {
return Self()
}
func makeADyn() -> A {
return Self.makeAStat()
}
}
let instanceOne = APrime.makeAStat()
let instanceTwo = APrime().makeADyn()
let arrayOf1 = [APrime()]
let instance3 = arrayOf1[0].makeADyn()
//let arrayOf2: [A.Type] = [APrime]
//let instance4 = arrayOf2[0].makeAStat()
请注意两条注释掉的行。他们将在操场上奔跑,但我想获得类似的效果,所以我只能说“这是一个WidgetPlus对象,因此可以从这三种类型中选择作为处理程序。”
有人对我实现这一目标的最佳方法有何建议?
答案 0 :(得分:3)
只需添加.self
let arrayOf2: [A.Type] = [APrime.self]
let instance4 = arrayOf2[0].makeAStat()
为了更加清晰,我建议写
protocol A {
static func makeAStat() -> Self
func makeADyn() -> Self
}
struct APrime: A {
static func makeAStat() -> APrime {
return APrime()
}
func makeADyn() -> APrime {
return APrime.makeAStat()
}
}