繁体   English   中英

返回在 swift 协议 function 中查看相关类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM