【问题标题】:Updating a UUID with another UUID in SwiftUI在 SwiftUI 中使用另一个 UUID 更新 UUID
【发布时间】:2023-01-02 23:53:56
【问题描述】:

我不确定这是否可能。我还是 SwiftUI 开发的新手。

所以这就是我想要完成的。

我正在使用拖放快速包,允许将项目从一个位置拖放到特定位置。

它使用 UUID 以便从一个位置(保持位置)拖动到另一个位置。

然而,我遇到的问题是,如果我只使用一个项目 IE 文本或图像,它就可以正常运行并相应地运行。

但是,我使用的网格具有多个从数据模型填充的项目。

// MARK: - Rune MODEL

struct Rune: Codable, Identifiable, Comparable  {
    static func < (lhs: Rune, rhs: Rune) -> Bool {
        lhs.title < rhs.title
    }
    
    let runeid = UUID()
    var id: Int
    var title: String
    var headline: String
    var image: String
    var pronunciation: String
    var sound: String
    var aett: String
    var god: String
    var knownas: [String]
    var keywords: [String]
    var translation: String
    var magick: [String]
    var gallery: [String]
    var meanings: [String]
    var runelore: [String]
    var poeticedda: [String]
    
    
}

每个项目都有自己的 UUID,效果很好。

在视图中,我循环遍历从 JSON 文件填充的数据模型中的每个项目,一切都很好。

每个项目都显示在网格中。

   LazyVGrid(columns: columns, spacing: 5) {
                                        ForEach(runes) { rune in

                                            RuneFrontView(rune: rune, width: width, height: height, degree: $frontDegree)

                                            RuneBackView(rune: rune, width: width, height: height, degree: $backDegree)
                                            
                                            switch rune.id {
                                            case 1:
                                                Text("rune 1")
//                                                runeofday = rune.runeid

                                            case 2:
                                                Text("rune 2")
//                                              runeofday = rune.runeid

                                            case 3:
                                                Text("rune 3")
//                                               runeofday = rune.runeid
                                            case 4:
                                                Text("rune 4")
//                                                runeofday = rune.runeid
                                            case 5:
                                                Text("rune 5")
//                                                runeofday = rune.runeid
                                            case 6:
                                                Text("rune 6")
//                                                runeofday = rune.runeid

                                            default:
                                                Text("rune default")
                                            } //:END OF SWITCH

                                        }.onTapGesture {
                                            flipCard ()
                                        }//: END OF ON TAP
                                    }//: END OF LAZY V GRID

在我使用的拖放包中,它有 2 个视图,一个拖放(接收位置)和一个拖放(从网格中所有项目所在的位置)。

在拖放视图中,它需要一个与被拖入该拖放区的项目关联的 UUID。这也将允许我得到被丢弃的东西,以便我以后可以使用它。

DragView(**id: runeofday**) { dragInfo in
                                Text(dragInfo.isDragging ? "Im being dragged" : "Drag me 1")
                                        .padding()
                                        .background{
                                            Color.mint
                                        } //:END OF BACK GROUND

我已经声明了一个名为 runeofday 的变量,我需要能够使用已经根据该项目的 ID 分配给每个项目的 UUID 进行更新。

这意味着我有 6 个符文,每个符文都有一个名为 runeid 的 UUID,我想用 rune.runeid UUID 值更新 runeoftheday 变量,并将其提供给 DragView/drop 区域(必须是 UUID)。

如果有更好的方法来处理不使用这个包,我很乐意改变逻辑。

我的最终目标是创建一个拖放区,可以将项目拖入其中,我可以捕获拖放其中的内容以向下游填充数据。我使用的图像将显示为空白,在他们将图像放到拖放区后,他们可以点击该项目并将其翻转过来。

希望这是有道理的。

我尝试了不同的变量类型,但无法设置 runeofday 变量,然后将其更新为另一个 UUID。

【问题讨论】:

  • 你能包括minimal reproducible example吗?很难看出您包含的两个示例在代码中实际上是如何连接的。
  • 我想我现在想通了。我将视图移到 for 循环中,并且能够将数据模型中的 UUID 传递给另一个视图。
  • 然后,您可以添加答案或删除问题。

标签: swift swiftui


【解决方案1】:

实际上,我最终重组了代码并且没有使用 case 语句。我能够从预先建立的数据模型中传递每个 UUID。

LazyVGrid(columns: columns, spacing: 10) {
                                    
      ForEach(runes.shuffled()) { rune in
                                        
           if viewRouter.runeofDayUseable {
               DragView(id: rune.runeid) { dragInfo in
                                                
                 RuneFlipView(rune: rune, isFlipable: true)

              } //: END OF DRAG VIEW
          .onDraggingEndedAction { isSuccessfullDrop in
                viewRouter.runeofDay = rune.id                                                viewRouter.runeofDayUseable.toggle()
            } //: END OF ON DRAGGING ENDED
      } //: END OF IF
    } //: END OF FOR
  } //: END OF LAZY V GRID

【讨论】:

    猜你喜欢
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多