我有以下协议:

protocol ViewCreator {

  associatedtype ResultView: View

  @ViewBuilder func createView() -> ResultView

}

我想知道它的类型,比如它的名字.因此,我编写了以下代码:

let typeName = String(describing: ViewCreator.self)

但出现以下错误:

协议‘ViewCreator’只能用作泛型约束,因为它具有自身或关联的类型要求.

在这种情况下,我如何才能获得具有关联类型的协议的"self"?

该协议的附注I don't have an implementation在范围内.

推荐答案

它与不使用关联类型时没有什么不同.

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

将来,您可能可以 Select 使用主要关联类型来提供限制.但目前,这将被编译和执行,但被认为是<<< invalid type >>>.

protocol ViewCreator<ResultView> {
(any ViewCreator<EmptyView>).self

Swift相关问答推荐

Swift Tree实现中的弱var

同步问题,发送Api Call之前未设置idToken

如何分解阿拉伯字母?

SwiftUI轨迹绘制怪异

如何在自定义视图中读取修改符子元素?

如何在SWIFT Memory中处理对VAR数组的更新(对COW感到困惑)

为什么我不能在这个 Swift 间接枚举中返回 self ?

相互取消任务

如何在应用程序区域永久更改 NSCursor?

是否可以限制 ExpressibleByIntegerLiteral struct 的初始值?

如何在 SwiftUI 中创建条件内容?

覆盖一个子元素的 HStack 对齐方式

Swift 并发:@MainActor 对象上的通知回调

Swift并发:为什么不在其他后台线程上执行任务

Swift-如何接受多个(联合)类型作为参数

如何获得不同的插入和移除过渡动画?

在 Swift 4 中实现自定义解码器

使 struct 可散列?

Swift中字节数组的NSData

无法将 NSAttributedString.DocumentAttributeKey 类型的值转换为 .DocumentReadingOptionKey