大佬教程收集整理的这篇文章主要介绍了Swift UI:如何在视图中显示空列表时显示错误消息?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个按字母顺序组织成组的
问题是:我如何显示搜索失败的消息,而不仅仅是一个空屏幕?只能在外部
此代码不会在赋值给
与其尝试在 您还没有包含您的模型代码,因此很难说要在该计算属性中放入什么,但从您的循环来看,它可能是一个 就像评论中提到的@lorem 一样,您可以将这种东西移动到视图模型中,但这并不是绝对必要的。如果您拥有大量数据并且出于资源原因想要限制通过数据的次数,则这可能会变得更加重要。 对于这样的情况 - 你必须绘制“这个”或“那个”,它们有很大的不同,我使用一个“EitherView”和一个相应的模型“Either”: 然后您可以添加模态呈现的视图和加载指示器,如下面的示例所示,旨在实现一个可重复使用的通用视图: 请注意,此示例中的视图状态不可变。 为了将此应用于您的问题,您只需要组合相应的 @H_727_46@model 或 viewState,最好在视图之外,例如在 viewModel 中。 >
现在您已将大问题分解为小块,每个小块都很容易解决。Terms@H_301_2@ 集合。下面的 Swift UI 代码将集合显示为一个
List@H_301_2@,按组划分为多个部分。每个组都根据(可能为空)搜索字符串进行过滤。所以显示的列表要么包含整个
Terms@H_301_2@ 集合,一个基于搜索字符串的子集,要么什么都不包含(如果搜索失败):
var body: some VIEw {
List() {
ForEach(terms.groups) { group in
let groupTerms = filteredTerms(for: group)
if searchText.isEmpty || !groupTerms.isEmpty {
Section(header: Text(group.Name)) {
ForEach(groupTerms) { term in
Navigationlink(desTination: DetailVIEw(term: term)) {
TermsRow(term: term)
}
}
}
}
}
}
}
@H_301_2@
ForEach@H_301_2@ 循环完成且所有
groupTerms@H_301_2@ 为空后才能确定搜索失败,但我无法捕获该信息 - Swift 不喜欢它,如果如果任何
searchSucceeded@H_301_2@ 非空,我在
ForEach@H_301_2@ 循环中粘贴一个
true@H_301_2@ 布尔值以设置为
groupTerms@H_301_2@,如下所示:
var searchSucceeded = false
var body: some VIEw {
List() {
ForEach(terms.groups) { group in
let groupTerms = filteredTerms(for: group)
if searchText.isEmpty || !groupTerms.isEmpty {
Section(header: Text(group.Name)) {
ForEach(groupTerms) { term in
Navigationlink(desTination: DetailVIEw(term: term)) {
TermsRow(term: term)
}
}
}
} else if !searchText.isEmpty && !groupIdioms.isEmpty {
searchSucceeded = true
}
}
// display message here if searchSucceeded is false
}
}
@H_301_2@
searchSucceeded@H_301_2@ 的情况下编译。我是 Swift UI 新手。最初的代码是由另一位不再可用的开发人员编写的。我希望有人能在这里帮助我。
解决方法
searchSucceeded
中设置 ForEach
,不如创建一个名为 displayError
的计算属性来确定是否应显示错误。每次渲染视图时都会重新计算计算属性,这会受到新属性、@State 更改等的影响。var displayError : Bool {
//condition here -- map? reduce?
return true
}
var body: some View {
List() {
ForEach(terms.groups) { group in
let groupTerms = filteredTerms(for: group)
if searchText.isEmpty || !groupTerms.isEmpty {
Section(header: Text(group.Name)) {
ForEach(groupTerms) { term in
NavigationLink(desTination: DetailView(term: term)) {
TermsRow(term: term)
}
}
}
}
}
if DisplayError {
Text("error message")
}
}
}
reduce
或可迭代您的组的内容并查看是否有有效数据。struct EitherView<Right: ComponentView,Left: ComponentView>: ComponentView {
var state: Either<Right.State,Left.State>
init(_ state: Either<Right.State,Left.State>) {
self.state = state
}
var body: some View {
switch state {
case .right(let right):
Right(right)
case .left(let left):
Left(left)
}
}
}
public enum Either<Right,Left> {
case right(Right)
case left(Left)
}
struct MyView<ContentView: ComponentView>: View {
typealias Content = ContentView.State
typealias Modal = ModalState<AlertState,SheetState,ActionSheetState,LoadingState>
private var state: ViewState<Content,Modal>
init(_ state: ViewState<Content,Modal>) {
self.state = state
}
var body: some View {
return GeometryReader { geometry in
ContentView(state.body)
.frame(width: geometry.size.width,height: geometry.size.height,alignment: .center)
}
.alert(item: showAlert) { alert in
SwiftUI.Alert(title: Text(alert.titlE),message: Text(alert.messagE))
}
.sheet(item: showSheet) { sheet in
...
}
.actionSheet(item: showActionSheet) { actionSheet in
SwiftUI.ActionSheet(title: Text(actionSheet.titlE))
}
}
}
private extension MyView {
var showAlert: Binding<AlertState?> {
Binding<AlertState?>(
get: { self.state.alert },set: { _ in self.state.dismiss() }
)
}
...
}
以上是大佬教程为你收集整理的Swift UI:如何在视图中显示空列表时显示错误消息?全部内容,希望文章能够帮你解决Swift UI:如何在视图中显示空列表时显示错误消息?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。