更改JSON响应上的按钮可见性时出现延迟

更改JSON响应上的按钮可见性时出现延迟,json,swift,uibutton,Json,Swift,Uibutton,如果JSON请求成功,我希望更改界面中某些按钮的可见性。然而,当我以下面描述的方式处理它时,由于某些原因,我会遇到巨大的延迟。print语句在每个状态调用中都会执行,但是按钮本身的可见性在30秒内都不会改变 func buttonStateOne() { self.executeButton.isHidden = false self.clearButton.isHidden = false self.stopButton.isHidden = true self

如果JSON请求成功,我希望更改界面中某些按钮的可见性。然而,当我以下面描述的方式处理它时,由于某些原因,我会遇到巨大的延迟。print语句在每个状态调用中都会执行,但是按钮本身的可见性在30秒内都不会改变

func buttonStateOne() {
    self.executeButton.isHidden = false
    self.clearButton.isHidden = false
    self.stopButton.isHidden = true
    self.greyExecuteButton.isHidden = true
    self.greyClearButton.isHidden = true
    self.greyStopButton.isHidden = false
    self.drawUIView.isUserInteractionEnabled = true
    print("On state one")
}

func buttonStateTwo() {
    self.executeButton.isHidden = true
    self.clearButton.isHidden = true
    self.stopButton.isHidden = true
    self.greyExecuteButton.isHidden = false
    self.greyClearButton.isHidden = false
    self.greyStopButton.isHidden = false
    self.drawUIView.isUserInteractionEnabled = false
    print("On state two")
}

func buttonStateThree() {
    self.executeButton.isHidden = true
    self.clearButton.isHidden = true
    self.stopButton.isHidden = false
    self.greyExecuteButton.isHidden = false
    self.greyClearButton.isHidden = false
    self.greyStopButton.isHidden = true
    self.drawUIView.isUserInteractionEnabled = false
    print("on state three")
}

@IBAction func sendLines() {
        self.buttonStateTwo()

        // Draw a path
        let theDrawView: DrawView = drawView as! DrawView
        var pathPoints = [Any]()
        for line in theDrawView.lines {
           pathPoints.append([line.start.x, line.start.y])
        }

        // Send the path
        let json: [String: Any] = [ "path": pathPoints ]
        let jsonData = try? JSONSerialization.data(withJSONObject: json)
        var request = URLRequest(url: URL(string: "http://localhost:5000/path")!)
        request.httpMethod = "POST"
        request.httpBody = jsonData
        request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {
                print(error?.localizedDescription ?? "No data")
                return
            }
            var responseString: String = ""
            let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
            if let responseJSON = responseJSON as? [String: String] {
                print(responseJSON["status"]!)
                responseString = responseJSON["status"]!
            }
            if responseString == "SUCCESS" {
                self.buttonStateThree()
            } else {
                self.buttonStateOne()
            }
        }
        task.resume()

    }

必须在主线程上更新UI,以便将包含
按钮state…
方法的块分派到主线程:

DispatchQueue.main.async {
   if responseString == "SUCCESS" {
       self.buttonStateThree()
   } else {
       self.buttonStateOne()
   }
}
可能重复的