首页 > 解决方案 > 聚合一系列 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 对象,所以它可以从这三种类型中选择作为处理程序”。

有没有人对我实现这一目标的最佳方式提出建议?

标签: swift

解决方案


只需添加.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()
    }
}

推荐阅读