将新数组追加到documents目录

时间:2018-11-26 11:49:12

标签: arrays swift nsdocumentdirectory

我正在将一组坐标保存到文档目录中。

为了添加更多的坐标数组,我构造了一个数组数组,内部数组包含坐标字典。

这样,在第一次保存时,内容将如下所示:

[
   [
      {
         "lat":123,
         "long":-0.123
      },
      {
         "lat":234,
         "long":-0.234
      }
   ]
]

在随后的保存中,我将添加新的坐标分组。

如何在文档目录中附加到此数组,使其看起来像这样的有效JSON。

[
   [
      {
         "lat":123,
         "long":-0.123
      },
      {
         "lat":234,
         "long":-0.234
      }
   ],
   [
      {
         "lat":345,
         "long":-0.345
      }
   ]
]

例如。我应该阅读documents目录的内容并插入新的数组,然后覆盖原始文件(由于文件会很快变大,所以我不想这样做)。

还是有直接添加到文件的方法?

1 个答案:

答案 0 :(得分:0)

您可以尝试

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        let str = """
            [
                [
                    {
                    "lat":123,
                    "long":-0.123
                    },
                    {
                    "lat":123,
                    "long":-0.123
                    }
                ]
            ]

          """


        let appendedStr = """

            [
                {
                "lat":123,
                "long":-0.123
                },
                {
                "lat":123,
                "long":-0.123
                }
            ]


        """

        do {

            var res = try JSONDecoder().decode([[Root]].self, from: str.data(using: .utf8)!)

            print(res)

            let app = try JSONDecoder().decode([Root].self, from: appendedStr.data(using: .utf8)!)

            res.append(app)

            print(res) 

            let dataToStore = try JSONEncoder().encode(res)

            print(dataToStore)
        }
        catch {

            print(error)
        }

    }
}

struct Root: Codable {
    let lat: Int
    let long: Double
}

输出

  

[[dsdsd.Root(lat:123,long:-0.123),dsdsd.Root(lat:123,long:-0.123)]

     

[[dsdsd.Root(lat:123,long:-0.123),dsdsd.Root(lat:123,long:-0.123)],[dsdsd.Root(lat:123,long:-0.123),dsdsd .Root(lat:123,long:-0.123)]]

     

109字节