【发布时间】:2019-10-14 22:01:30
【问题描述】:
我正在尝试创建一个自定义 SwiftUI 视图,该视图的行为类似于默认视图,我可以在其中使用方法或可选的初始化程序参数向视图添加额外内容。
SomeCustomView(title: "string argument") {
// some view
}
SomeCustomView(title: "hello") {
// some view
}.sideContent {
// another view
}
// This style is acceptable too
SomeCustomView(title: "hello", sideContent: { /* another view */ }) {
// some view
}
我怎样才能修改这个视图结构使其表现得像上面的例子?
struct SomeCustomView<Content>: View where Content: View {
let title: String
let content: Content
init(title: String, @ViewBuilder content: () -> Content) {
self.title = title
self.content = content()
}
var body: some View {
VStack {
Text(title)
content
}
}
}
理想情况下,我有两个不同的主体“模板”,我可以根据是调用 sideContent 方法还是设置了 sideContent 参数来切换它们。例如,
var body: some View {
VStack {
Text(title)
content
}
}
// or
var otherBody: some View {
HStack {
VStack {
Text(title)
content
}
sideContent
}
}
【问题讨论】:
-
为什么不创建一个群组,这样您就可以说
if并根据某些属性包含或不包含侧视图? -
@matt 我尝试过类似的方法,但我不知道如何接受可能是
nil或EmptyView的任意可选视图。 -
我明白你的意思了。