作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个可选的通用 View @ViewBuilder
.
我想要两个初始化器,一个负责设置@ViewBuilder
另一个应该作为空的默认值。
struct OptionalViewBuilder<Content: View>: View {
let content: (() -> Content)?
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content
}
init() {
self.content = nil
}
var body: some View {
VStack {
Text("Headline")
Divider()
content?()
}
}
}
如果我使用 ViewBuilder 参数初始化 View ,它当然可以工作。但是,当我使用空初始值设定项时,我收到错误消息:
Generic parameter 'Content' could not be inferred
struct ContentView: View {
var body: some View {
OptionalViewBuilder {
Text("Text1")
Text("Text2")
}
OptionalViewBuilder() // <-- Generic parameter 'Content' could not be inferred
}
}
我知道 Swift 在运行时需要显式类型,但是有没有办法让默认初始化程序正常工作?
最佳答案
因为 OptionalViewBuilder
关于它的 Content
是通用的类型,您需要将该类型定义为默认情况下的内容。这可能是 EmptyView
,如果你不想渲染任何东西。
为此,您需要一个 init
这被限制为 Content == EmptyView
,以及 content
属性不必是可选的:
struct OptionalViewBuilder<Content: View>: View {
let content: () -> Content
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content
}
init() where Content == EmptyView {
self.init(content: { EmptyView() })
}
var body: some View {
VStack {
Text("Headline")
Divider()
content()
}
}
}
关于SwiftUI - 我可以为通用 View 定义一个空的初始值设定项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66215607/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!