小编Łuk*_*asz的帖子

Swift Codable:用字典解析 JSON?多个不同的条目?

我有一个非常大的 Json 文件要(几 MB)解析,但没有合适的文档。生活艰难。就我可以识别文件中的对象而言,这很容易。但是有些东西我不明白,简单的 Codable 协议失败了。在数组中,layers我可以找到三个 Layer 对象,每个对象都有属性elements。在elements我可以找到不止一个elementData在第一层有"ImageID":32dd...component,在第二层"name":...和第三层有和"contours": [...]。可能会有更多的可能性。我的每一次尝试都以错误结束。

对不起,这段代码会很长,但我不想剪掉重要的部分:

    "layers":[
    {
      "name":"img",
      "elements":[
        {
          "elementData":{
            "imageId":"32dd800000002"
          },
          "transform":{
            "xScale":100,
            "yScale":100
          },
          "active":true
        },
        {
          "component":{
            "glyphName":"e",
            "layerName":"img"
          }
        },
        {
          "elementData":{
            "composite":{
              "builder":{
                "builderGroup":{
                }
              }
            }
          },
          "transform":{
            "xOffset":120
          },
          "nonSpacing":true
        }
      ],
      "color":"maroon",
      "active":true
    },
    {
      "name":"Black",
      "elements":[
        {
          "component":{
            "glyphName":"e",
            "layerName":"Black"
          }
        },
        {
          "elementData":{
            "name":"caron",
            "contours":[
              {
                "nodes":[
                  "80 …
Run Code Online (Sandbox Code Playgroud)

swift codable

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

SwiftUI UndoManager — 它是如何工作的?是否有效?

我正在尝试了解 UndoManager 的工作原理。我制作了一个小应用程序来撤消/重做某些操作。我有几个问题,我在文档中找不到答案:

  1. 我知道 UndoManager 可以通过以下方式在 View 中访问

    @Environment(\.undoManager) var undoManager

杰出的。但在这种情况下,它仅在视图中可用,如果我想在结构中更深的地方使用它,我必须通过模型将其传递给对象...是否有一种方法可以在其他对象中访问相同的 UndoManager ?模型、数据...我可以更方便,特别是如果有很多撤消分组。如果我在文档(或其他地方)中创建 UndoManager,则主菜单“编辑”->“撤消”、“重做”将看不到它

  1. 在GitHub 上的应用程序存储库中,我实现了撤消/重做。对我来说(哈哈)它看起来不错,甚至可以工作,但不适用于第一次行动。第一个操作撤消会导致Thread 1: signal SIGABRT错误。经过三个操作后,我可以撤消最后两个操作……砰。有问题

     import Foundation
     import SwiftUI
    
     struct CustomView: View {
         @ObservedObject var model: PointsViewModel
    
         @Environment(\.undoManager) var undoManager
    
         @GestureState var isDragging: Bool = false
         @State var dragOffsetDelta = CGPoint.zero
    
         var formatter: NumberFormatter {
             let formatter = NumberFormatter()
             formatter.allowsFloats = true
             formatter.minimumFractionDigits = 2
             formatter.maximumFractionDigits = 5
             return formatter
         }
    
         var body: some View {
             HStack {
                 VStack(alignment: .leading, …
    Run Code Online (Sandbox Code Playgroud)

macos nsundomanager swift swiftui

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

标签 统计

swift ×2

codable ×1

macos ×1

nsundomanager ×1

swiftui ×1