Swift 在抽象基类上实现ExpressibleByStringLiteral

Swift 在抽象基类上实现ExpressibleByStringLiteral,swift,literals,Swift,Literals,我有一个非常简单的类结构,其中一个“抽象”基类,节点,在几个具体的子类中实现。在我的例子中,基类表示对象的公共接口,因此为了简单起见,大多数类型引用都是纯粹的Node 然而,我现在想做的是在抽象的节点上实现对ExpressibleByStringLiteral的支持,这样当字符串被解释为节点时,我可以实例化一个特定的(我选择的)具体子类 问题在于ExpressibleByStringLiteral似乎不允许我这样做,因为它要求我实现一个必需的初始值设定项,而不是一个静态函数(在我看来,这样做更有

我有一个非常简单的类结构,其中一个“抽象”基类,
节点
,在几个具体的子类中实现。在我的例子中,基类表示对象的公共接口,因此为了简单起见,大多数类型引用都是纯粹的
Node

然而,我现在想做的是在抽象的
节点上实现对
ExpressibleByStringLiteral
的支持,这样当
字符串
被解释为
节点
时,我可以实例化一个特定的(我选择的)具体子类

问题在于
ExpressibleByStringLiteral
似乎不允许我这样做,因为它要求我实现一个必需的初始值设定项,而不是一个静态函数(在我看来,这样做更有意义)。我已经让它能够处理一个具体的子类,但是考虑到具体类型很少被显式使用(事实上我更希望不是这样),这对我来说是非常无用的,因为所有的东西都要通过基
节点
类型

我想要的是能够做到这一点:

let node: Node = "textual representation of a node"
由于子类仍然是
Node
s,这并不违反任何面向对象的原则,但是Swift似乎不想让我这么做


有没有办法解决这个问题,或者这只是
ExpressibleByStringLiteral
的一个限制?

Swift没有抽象类,你是说协议吗?我只是说在概念上它是抽象的,就像从未直接实例化一样。在这种情况下,是的,它是一个Swift限制,您可以将子类的一个实例包装在一个属性中,并转发所有方法调用和属性,但对我来说,这看起来像是一种黑客行为,在这种情况下,我会使用工厂(但您将失去
ExpressibleByStringLiteral
advantages:/)看看Swift中的类集群或工厂初始值设定项将是非常棒的。我有点希望我们能回到初始设定者在Objective-C中的工作方式;它们在斯威夫特里太复杂了。