我想在协议中使用View。
print("input {!r}, expected output {!r}, got {!r}".format(xi, xo, output))
^
协议“视图”只能用作通用约束,因为它 有自我或相关类型要求
我只想做与ViewController相同的事情。任何想法?
protocol Test {
var view: View { get }
}
如果使用关联的类型,则会在其他协议中收到错误消息。
protocol Test {
var viewController: UIViewController { get }
}
任何想法如何解决这个问题?谢谢:)
答案 0 :(得分:0)
SwiftUI.View是一个协议,并且由于它使用Self
(例如,在其body property中),因此无法直接将属性类型声明为View
。 / p>
您可以在Test
上定义关联的类型,并将该类型限制为View
:
protocol Test {
associatedtype T: View
var view: T { get }
}
答案 1 :(得分:0)
除非将该协议声明为关联类型,否则不能直接使用该协议,但是可以使用擦除的AnyView
类型:
protocol Test {
var view: AnyView { get }
}
创建AnyView
实例可能会在代码中添加一些噪音,但是创建起来很容易。
答案 2 :(得分:0)
扩展了Cristik的解决方案:
protocol ViewFactoryProtocol {
func makeView(parameter: SomeType) -> AnyView
}