swift 为返回associatedtype的协议方法提供默认实现

5uzkadbs  于 2023-02-28  发布在  Swift
关注(0)|答案(1)|浏览(141)

我有一个基本协议:

protocol MyProtocol {
    associatedtype Content: View
    @MainActor @ViewBuilder func content() -> Content
}

我想为content()提供一个默认实现,所以我想我应该这样做:

extension MyProtocol {
    @MainActor @ViewBuilder func content() -> some View {
        EmptyView()
    }
}

这是可行的,但是,现在一致类型中的自动完成会做一些奇怪的事情,它使用Content而不是返回类型some ViewContent不会编译:

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")
    }
}

有没有办法纠正这种行为?

v09wglhw

v09wglhw1#

如注解部分所述,问题是当你尝试使用自动完成时,关联类型Content尚未定义。如果你在实现content()函数自动完成之前**用类型别名 * 定义Content,那么它将按预期运行。即:

struct Implementation: MyProtocol {
    typealias Content = Text
    
    func content() -> Text {
        <#code#>
    }
}

相关问题