小编Cha*_*age的帖子

使用新的 Dart seal-class 功能,是否可以进行嵌套切换?

我有一个 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)

dart sealed-class

6
推荐指数
1
解决办法
2625
查看次数

SwiftUI LazyVGrid 不显示两列

我正在 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

5
推荐指数
1
解决办法
1693
查看次数

如何在 Swift 中查询具有多个键值对的 firestore 数组

我在 Cloud Firestore 中的一个集合有一个数组,其中数组中的每个项目都包含三个单独的值(请参阅该groupMembership字段: 在此输入图像描述

我知道我无法编写查询来查找与数组值之一匹配的文档。有没有办法编写查询来查找与所有三个项目的特定值匹配的文档?

例如,我想找到数组中包含一个对象的所有users位置groupMembership,该对象等于groupId: X, groupName: Y, membershipStatus: active

firebase swift google-cloud-firestore

1
推荐指数
1
解决办法
791
查看次数

SwiftUI - FatalError:接受数量应该减少的工作表时索引超出范围

我在 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)

swiftui

1
推荐指数
1
解决办法
629
查看次数