Как изменить текст метки с полученными данными через UDP с помощью CocoaAsyncSocket - PullRequest
0 голосов
/ 19 мая 2019

Я использую CocoaAsyncSocket для отправки и получения данных с устройства ESP32 через UDP. Я могу отправлять данные (String) без проблем, даже могу получать данные и печатать их с помощью print("incoming message: \(data)") Но я не могу изменить текст метки с этими данными.

У меня есть метка @IBOutlet weak var mylabel1: UILabel? в class ViewController: UIViewController, затем у меня есть классы inSocket и OutSocket в отдельном файле swift.

Но когда я получаю данные с классом inSocket (в отдельном файле swift), Я могу просто напечатать его с помощью print (), но не изменять текст метки, определенный в отдельном файле ViewController swift.

Файл ViewController.swift:

class ViewController: UIViewController {
    var inSocket : InSocket!
    var outSocket : OutSocket!

    @IBOutlet weak var mylabel1: UILabel?
    @IBOutlet weak var btn_minus1: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        inSocket = InSocket()
        outSocket = OutSocket()
        outSocket.setupConnection {

        }

        //mylabel1.text = change_label
        //mylabel1?.text = "22"
    }

    func updateLabel(l_value: String?) {
        print("Contains a value! It is \(String(describing: l_value))!")

        if let label = mylabel1
        {
            label.text = l_value
            print("label changed")
            //mylabel1?.text = "22"
        }else{
            print("label not changed")
        }
...

Файл InSocket.swift:

       class InSocket: NSObject, GCDAsyncUdpSocketDelegate {

        //let IP = "192.168.5.122"
        let IP = "192.168.5.143"
        let PORT:UInt16 = 8690
        var socket:GCDAsyncUdpSocket!

        var controller = ViewController()
        //var ViewController:ViewController?
        //var change_label = "--";
        //var text:String = ""

        //@IBOutlet weak var mylabel1: UILabel?

        override init(){
            super.init()
            setupConnection()

        }

        func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?) {
            print("incoming message: \(data)");

                    controller.updateLabel(l_value: String(data: data, encoding: .utf8) ?? "null")

...
...