[英]return View in swift protocol function with associatedtype
public protocol NodeBuilder {
associatedtype OutputView: View
func build() -> OutputView
}
public struct Builder {
private let builder: NodeBuilder // Protocol 'NodeBuilder' can only be used as a generic constraint because it has Self or associated type requirements
public init(builder: NodeBuilder) { // Protocol 'NodeBuilder' can only be used as a generic constraint because it has Self or associated type requirements
self.builder = builder
}
public func build<OutputView: View>() -> OutputView {
builder.build() // Member 'build' cannot be used on value of protocol type 'NodeBuilder'; use a generic constraint instead
}
}
struct Component: NodeBuilder {
func build() -> some View {
Text("Some View")
}
}
我正在尝试在这里创建一个可重用的协议。 我收到错误,这些错误在此处添加为评论。 在网上找不到任何解决方案来解决这个问题。 我怎样才能使这段代码工作? 或者有什么建议可以在哪里查找有关它的更多信息? 谢谢!
具有关联类型的协议不能用作类型(但是在 Swift 5.7 中可以)
由于错误状态,您必须使用受协议约束的 generics
例如
public protocol NodeBuilder {
associatedtype OutputView: View
func build() -> OutputView
}
public struct Builder<N: NodeBuilder> {
private let builder: N
public init(builder: N) {
self.builder = builder
}
public func build<N>() -> N {
builder.build() as! N
}
}
struct Component: NodeBuilder {
func build() -> some View {
Text("Some View")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.