Как я могу сохранить значение переменной вне функции? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь отобразить значение, полученное из JSON в тексте AR, в функции DecodeJSON все это работает, я даже достигаю, чтобы поместить это значение в обычную метку, но когда я пытаюсь установить это значение наAR текст пусто ... что я могу сделать или что я делаю не так?Было бы очень полезно, если бы вы могли помочь мне с этим.

@IBOutlet var sceneView: ARSCNView!
@IBOutlet weak var labelTest: UILabel!

let URL_VWC = "http://w1.doomdns.com:11000/restaguapotable/api/celula/10/sitio/4";

var name :String!

struct JSONTest: Codable {
    let Nombre: String
    let Tiempo: String
}

override func viewDidLoad() {
    super.viewDidLoad()


    // Set the view's delegate
    sceneView.delegate = self

    // Show statistics such as fps and timing information
    sceneView.showsStatistics = true

    // Create a new scene
    let scene = SCNScene()

    // Set the scene to the view
    sceneView.scene = scene
    DecodeJson();


    let text = SCNText(string: name, extrusionDepth: 1.0)
    text.firstMaterial?.diffuse.contents = UIColor.black

    let textNode = SCNNode(geometry: text)
    textNode.position = SCNVector3(0,0, -0.5)
    textNode.scale = SCNVector3(0.02,0.02,0.02)

    sceneView.scene.rootNode.addChildNode(textNode)
}


func DecodeJson(){
    guard let url = URL(string: URL_VWC) else { return }

    // 2
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        if error != nil {
            print(error!.localizedDescription)
        }

        guard let data = data else { return }
        do {
            // 3
            //Decode data
            let JSONData = try JSONDecoder().decode(JSONTest.self, from: data)
            // 4
            //Get back to the main queue
            DispatchQueue.main.async {
                self.name = JSONData.Nombre
                self.labelTest.text = self.name
            }

        } catch let jsonError {
            print(jsonError)
        }
        // 5
        }.resume()
}

1 Ответ

0 голосов
/ 09 апреля 2019

Это означает, что DecodeJson() возвращает self.name = JSONData.Nombre после вызова let text = SCNText(string: name, extrusionDepth: 1.0).

У вас должна быть отдельная функция, в которой вы настраиваете свою сцену после того, как DecodeJson() вернул JSON

...