在SwiftUI中使用另一个UUID更新UUID

nbysray5  于 2023-01-04  发布在  Swift
关注(0)|答案(1)|浏览(172)

我不确定这是否可能。我对SwiftUI开发还是新手。
这就是我想要达到的目标。
我正在使用一个拖放swift包,它允许将一个项目从一个位置拖放到一个特定的位置。
它使用UUID以便从一个位置(保存位置)拖到另一个位置。
然而,我遇到的问题是,如果我只使用一个项目,即文本或图像,它的罚款和相应的运作。
但是,我使用的网格具有多个从数据模型填充的项。

// 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的变量,我需要能够使用UUID更新该变量,该UUID已经根据每个项目的ID分配给该项目。
这意味着我有6个Runes,每个Runes都有一个名为runeid的UUID,我想用rune.runeid UUID值更新runeoftheday变量,并将其提供给拖放区(要求是UUID)。
如果有更好的方法来处理不使用这个包,我很乐意改变逻辑。
我的最终目标是创建一个拖放区,可以将一个项目拖到其中,我可以捕获拖到其中的内容,以填充下游数据。我使用的图像将显示为空白,在将图像拖到拖放区后,他们可以点击该项目,它会将其翻转。
希望这是有道理的。
我尝试了不同的变量类型,但无法设置runeofday变量,然后将其更新为另一个UUID。

rbpvctlc

rbpvctlc1#

实际上,我最终重新构造了代码,并且没有使用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

相关问题