聚合一系列快速类型

时间:2020-02-03 16:24:52

标签: swift

在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对象,因此可以从这三种类型中选择作为处理程序。”

有人对我实现这一目标的最佳方法有何建议?

1 个答案:

答案 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()
    }
}
相关问题