代码之家  ›  专栏  ›  技术社区  ›  Chris Marshall

聚合swift类型数组

  •  0
  • Chris Marshall  · 技术社区  · 4 年前

    在斯威夫特,我知道类型是自己的类,但我有一个困难的工作,使这一点。

    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 回复  |  直到 4 年前
        1
  •  2
  •   vadian    4 年前

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