使用关联类型获取协议的“self”

5

我有以下协议:

protocol ViewCreator {

  associatedtype ResultView: View

  @ViewBuilder func createView() -> ResultView

}

我想获取它的类型,例如获取它的名称。所以我写了以下代码:
let typeName = String(describing: ViewCreator.self)

但是遇到了以下错误:

协议“ViewCreator”只能用作泛型约束,因为它具有Self或关联类型的要求。

在这种情况下,我应该如何获取带有关联类型的协议的“self”?

P.S. 我没有这个协议的实现在范围内。


1
你想要实现什么目标? - EmilioPelaez
@EmilioPelaez 获取协议类型名称作为字符串 - Artemiy Dmitrievich
这就是你想要做的事情。你的目标是什么?一旦你获得了那个字符串,你打算做什么? - EmilioPelaez
@EmilioPelaez 我想把这个协议的工厂放到字典里,其中键将是协议类型名称。 - Artemiy Dmitrievich
1个回答

4

与不使用关联类型时没有任何区别。

(any ViewCreator).self

String(describing: (any ViewCreator).self) // "ViewCreator"

未来,您可能可以使用主关联类型来提供限制。但目前,这将编译和执行,但会被认为是<<<无效类型>>>

protocol ViewCreator<ResultView> {

(any ViewCreator<EmptyView>).self

当我不使用associatedtype时,一切都正常工作。我不理解你在协议中使用"(any..."和泛型的例子,它们对我来说无法编译。 - Artemiy Dmitrievich
2
这是因为您没有使用当前版本的Swift。请切换到Xcode beta。 - user652038

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接