Я использую 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")
...