Swift 3和缺乏递归协议约束

经过更多的挖掘之后,我终于确认它是Swift中的当前限制。 在此处,此处和此处查看未解决的问题以及有关此主题的讨论。

我在Stack Overflow上寻求了临时解决方法的建议,直到Swift支持。 不幸的是,还没有添加任何答案,但是投票和明星的数量让我觉得其他人也在为此而苦苦挣扎。

无论如何,我需要一个临时的解决方法,我能想到的最好的方法是以下方法,也可以在SO帖子中看到:

主要思想是通过使某人符合Any来打破递归性。 这不是理想的,但是暂时可以接受。 在我的示例中,某人是一个delegate ,该delegate基本上是某种“中介对象”,用于处理ViewViewModel之间的ViewModel 。 拥有此delegate的唯一缺点是,需要从创建对象的“外部”进行设置,并且不能在View实现中进行设置。 如果尝试这样做,则会出现错误Cannot assign value of type View to type _? 会出现。

但是,通过这种方法,我们无需进行大量专业化操作即可获得正确的类型。 当然,可以添加更多协议以具有更多抽象,但是将应用相同的解决方案。