Отредактируйте файл JSON в Swift 5 | Xcode 11 - PullRequest
1 голос
/ 05 апреля 2020

oke, я пытаюсь загрузить файл JSON (что я и сделал), но я не могу понять, как отредактировать файл. Я пытаюсь изменить логическое значение с ложного на истинное. Я пробовал довольно много методов, и ни один из них не работает с настройкой, которую я получил. Вот версия моего кода: file1 (SpotsData.swift):

import Foundation
struct SpotsData: Codable{

    var spot_id: Int
    var spot_name: String
    var spot_long: Double
    var spot_lat: Double
    var spot_complete : Bool


}

file4 (ViewController.swift) есть больше кода, но это то, что имеет отношение

class ViewController: UIViewController {


    override func viewDidLoad() {

        let data = DataLoader().spotsData //loads the data
        print(data) //shows the data
        print(data[1].spots_complete)//the thing I want to change(prints false)

   }

file5 (DataLoader.swift) // это то, что загружает мои данные

import Foundation
public class DataLoader{

  @Published var spotsData = [SpotsData]()
    init(){
        load()
        sort()
    }
    func load(){
        if let fileLocation = Bundle.main.url(forResource: "spots", withExtension: "JSON"){
            do{
                let data = try Data(contentsOf: fileLocation)
                let jsonDecoder = JSONDecoder()
                let dataFromJson = try jsonDecoder.decode([SpotsData].self, from: data)
                self.spotsData = dataFromJson
            }
            catch{
                print(error)
            }
        }
    }
    func sort(){
        self.spotsData = self.spotsData.sorted(by:{$0.spot_id < $1.spot_id})
    }
}

file6 (spot. JSON) // мои данные [long и lat имеют данные, но для этого равны 0]

[
    {
        "spot_id" : 0,
        "spot_name" : "windmill",
        "spot_lat" : 00000,
        "spot_long" : 00000,
        "spot_complete" : false
    },

    {
        "spot_id" : 1,
        "spot_name" : "rock",
        "spot_lat" : 0000,
        "spot_long" : -0000,
        "spot_complete" : false
    },

    {
        "spot_id" : 2,
        "spot_name" : "patio",
        "spot_lat" : 000,
        "spot_long" : -000,
        "spot_complete" : false
    },

    {
        "spot_id" : 3,
        "spot_name" : "dogging",
        "spot_lat" : 000,
        "spot_long" : -0000,
        "spot_complete" : false
    }

]

У меня также есть appDelegate и sceneDelegate, но они не были изменены для этого проекта. Я пытался найти способ обновить их так же, как в обратном порядке, чтобы я мог сохранить [1] .spots_complete = true. Тогда он будет иметь файл, имея другие функции в других разделах или файлах, как я ранее. Любая помощь была бы большой, спасибо, я застрял на этом некоторое время. Большое спасибо:)

...