我有一个 FailureOrSuccess 的密封类,其中包含 Success 和 Failure.ch 的子类
Failure 子类也是一个密封类,具有针对不同类型故障的多个子类。
我想要一个在失败和成功之间切换的 switch 语句,并且在失败代码块内有另一个允许我在不同失败选项之间切换的 switch 语句?
是否可以使用嵌套密封类来做到这一点?
(这是我下面尝试做的一个示例,尽管这不起作用)。
switch (state.authFailureOrSuccessOption) {
case Success(): {
context.router.replace(const DailyRoute());
}
case Failure(): {
String text;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(switch (???) {
case CancelledByUser:
return 'Cancelled';
case ServerError:
return 'Server Error';
case EmailAlreadyInUse:
return 'Email already in use';
case InvalidEmailAndPasswordCombination:
return 'Invalid email and password combination';
case UnknownError:
return 'An unknown error occurred';
}),));
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的密封类列表供参考:
// Overall Class
sealed class FailureOrSuccess {
const FailureOrSuccess(); …Run Code Online (Sandbox Code Playgroud) 我正在 Xcode 的 beta 版本中使用 LazyVGrid,并且尝试使垂直 ScrollView 显示为两列而不是一列。我将此视图设置为包含一个 ScrollView,用于检查 iOS 14 是否可用,如果可用,则将视图呈现为两列网格(我将列放入 LazyVGrid 的此实例中,而不是作为外部属性,因为我没有'不想用 #available 属性标记整个视图 - 尽管也许我应该)。
但是,当我预览视图时,它只显示一列。我的设置中是否有任何内容可能导致我的视图仅显示一列而不是两列?
相关 - 有没有一种简单的方法可以在 Xcode 中预览包含/不包含 iOS 14 的不同版本?(如果我的问题是我的预览版本没有 iOS 14)。
以下是我的看法,供参考:
struct PackPage: View {
@Binding var isPresented: Bool
var allPacks: [Pack] = [samplePack, couplesPack, roadTripPack, familyPack]
var purchasedPacks: [Pack] = [samplePack]
var unpurchasedPacks: [Pack] = [couplesPack, roadTripPack, familyPack]
let userDefaults = UserDefaults.standard
@State private var action: Int? = 0
@State private var linkLock: Pack? = samplePack
private func isPurchased(pack: Pack, …Run Code Online (Sandbox Code Playgroud) 我在 SwiftUI 应用程序中有一个弹出表,应该允许我接受我可以属于的任何新组的邀请 - 弹出表是一个选项卡视图,允许我在所有不同的邀请之间滑动,并且当我接受或拒绝它们时,它们就会消失。
@main但是,每当我接受或拒绝最终邀请时,我的应用程序就会崩溃。
该邀请表有一个视图模型,其属性是我所有待处理邀请的数组。它为每个待处理的邀请构造一个带有选项卡的 tabView。工作表视图有一个“sheetCount”状态变量,该变量应该随着邀请被接受而减少,然后在工作表计数达到零时关闭该工作表。
我怀疑正在发生的事情是在sheetCount达到零之前待处理的邀请减少到零,并且在尝试在没有可用选项卡的情况下渲染它时出现一些问题,这导致了崩溃。但崩溃错误似乎不具体:
2021-11-05 08:59:07.036721-0400 GoalTogether[748:24652] [UICollectionViewRecursion] cv == 0x1052d2800 Disabling recursion trigger logging
Swift/ContiguousArrayBuffer.swift:580: Fatal error: Index out of range
2021-11-05 08:59:29.996209-0400 GoalTogether[748:24652] Swift/ContiguousArrayBuffer.swift:580: Fatal error: Index out of range
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来构造此代码流,以便sheetCount 直接遵循pendingInvitations 的数量,并在从属性中删除最后一个pendingViewModel 后立即关闭工作表?
这是弹出表,其中包含所有pendingInviteViewModels内容groupHubViewModel并为每个待处理的邀请构建邀请的选项卡视图。
struct PendingGroupsSheet: View {
@ObservedObject var groupHubVM: GroupHubViewModel
@State var sheetCount: Int
@Environment(\.presentationMode) var presentationMode
init(groupHubVM: GroupHubViewModel) {
self.groupHubVM = groupHubVM
self._sheetCount = State(initialValue: groupHubVM.pendingInviteViewModels.count)
}
var body: some View {
TabView { …Run Code Online (Sandbox Code Playgroud)