我有一个基本协议:
protocol MyProtocol {
associatedtype Content: View
@MainActor @ViewBuilder func content() -> Content
}
我想为content()
提供一个默认实现,所以我想我应该这样做:
extension MyProtocol {
@MainActor @ViewBuilder func content() -> some View {
EmptyView()
}
}
这是可行的,但是,现在一致类型中的自动完成会做一些奇怪的事情,它使用Content
而不是返回类型some View
,Content
不会编译:
struct Implementation: MyProtocol {
func content() -> Content { // Auto-completed, does not compile
Text("ABC")
}
}
我必须手动修复返回类型:
struct Implementation: MyProtocol {
func content() -> some View { // Now it compiles
Text("ABC")
}
}
有没有办法纠正这种行为?
1条答案
按热度按时间v09wglhw1#
如注解部分所述,问题是当你尝试使用自动完成时,关联类型
Content
尚未定义。如果你在实现content()
函数自动完成之前**用类型别名 * 定义Content
,那么它将按预期运行。即: