如果我想在SwiftUI中呈现项目列表,则可以执行以下操作(使用XCode 12):
struct MyView: View {
let texts: [String]
var body: some View {
ScrollView {
LazyVStack {
ForEach(texts.indices, id: \.self) { index in
MyRow(label: texts[index])
}
}
}
}
struct MyRow: View {
let label: String
var body: some View {
Text(label).font(.title3).padding()
}
}
}
MyRow
可以不是一个结构,而可以是一个函数,从而使代码更加简洁和实用:
struct MyView: View {
let texts: [String]
var body: some View {
ScrollView {
LazyVStack {
ForEach(texts.indices, id: \.self) { index in
MyRow(label: texts[index])
}
}
}
}
@ViewBuilder func MyRow(label: String) -> some View {
Text(label).font(.title3).padding()
}
}
我想了解两种方法之间的区别。 在某些情况下,您会优先选择一个吗?
首先想到的是,您无法拥有具有函数的@State
属性,这意味着如果视图需要状态,则需要使用struct
方法。
就这些吗?在某些情况下,是否有一种方法在优化方面更好?调试?特征?可移植性?
答案 0 :(得分:0)
<div class="" style="flex-wrap: wrap; display: flex;">
{{ formset.management_form }}
{% for form in formset %}
{% csrf_token %}
<div class="col ">
<table style="border-radius: 21px;">
<p style="font-weight: 500;" class="question-text">
</p>
<tr class="bubbles">
<td class="bubble-text-left">Not interested </td>
{% for choice in form.value %}
<td>
<label class="container">
<input type="radio" name="{{ form.value.choice.name }}" value="{{ form.value.choice.0 }}" id='{{ form.value.choice.auto_id }}' class="{{ radio_input.choice_value }}">
<span class="checkmark"></span>
</label>
</td>
{% endfor %}
<td class="bubble-text-right">Very interested</td>
</tr>
</table>
<br>
</div>
{{ form.id }}
{{ form.question }}
{% endfor %}
</div>
通常用于有条件地渲染视图,而无需使用@ViewBuilder
这样的解析器。引用Apple Developer's website:“此函数的客户端可以使用多语句闭包来提供多个子视图”。例如,如果您要显示取决于变量的视图,即,如果某个变量为true,则渲染View1,如果其为false,则渲染View2。