返回符合快速协议的类(实际的类,而不是它的实例)

时间:2018-09-25 16:45:43

标签: swift protocols swift-protocols

我在返回类而不是返回符合协议的实例方面遇到麻烦。那是可能的吗?这是我的代码的近似值:

public protocol MyProt {
    //things
}

var protConformer: MyProt {
    return boolVar ? ClassOne : ClassTwo // where both classes conform to MyProt
}

当然,我在这里遇到一个错误,说"Cannot convert return expression of type 'ClassOne.Type' to return type 'MyProt'。关于这是否可能的任何想法?

2 个答案:

答案 0 :(得分:3)

您需要将protConformer的类型更改为协议的元类型,即MyProt.Type,如果要返回符合协议的 type 而不是这种类型的实例。

var protConformer: MyProt.Type {
    return boolVar ? ClassOne.self : ClassTwo.self
}

答案 1 :(得分:3)

类型MyProt表示“采用MyProt的类型的实例”。如果您真的想操纵元类型,则语法为:

var protConformer: MyProt.Type {
    return boolVar ? ClassOne.self : ClassTwo.self
}

但是我必须警告您,这几乎从来都不是正确的选择。无论您遇到什么现实问题,您都可能在这里寻找通用名称。