Swift 3和缺乏递归协议约束
经过更多的挖掘之后,我终于确认它是Swift中的当前限制。 在此处,此处和此处查看未解决的问题以及有关此主题的讨论。
我在Stack Overflow上寻求了临时解决方法的建议,直到Swift支持。 不幸的是,还没有添加任何答案,但是投票和明星的数量让我觉得其他人也在为此而苦苦挣扎。
无论如何,我需要一个临时的解决方法,我能想到的最好的方法是以下方法,也可以在SO帖子中看到:
主要思想是通过使某人符合Any
来打破递归性。 这不是理想的,但是暂时可以接受。 在我的示例中,某人是一个delegate
,该delegate
基本上是某种“中介对象”,用于处理View
和ViewModel
之间的ViewModel
。 拥有此delegate
的唯一缺点是,需要从创建对象的“外部”进行设置,并且不能在View实现中进行设置。 如果尝试这样做,则会出现错误Cannot assign value of type View to type _?
会出现。
但是,通过这种方法,我们无需进行大量专业化操作即可获得正确的类型。 当然,可以添加更多协议以具有更多抽象,但是将应用相同的解决方案。