Swift. Почему не выполняется условие сравнения в операторе if

Потихоньку начинаю программировать на Swift и наткнулся на проблему, помогите решить. Есть переменная в AppDelegate, которая получает значение через GCDAsyncSocket с сервера. Розетку прописал тоже в AppDelegate.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        tcpClientSocket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.main)
return true
    }

func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
        dataRx = String(data: data, encoding: .utf8)!
        print(dataRx)
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ReceivedData"), object: nil)
        tcpClientSocket?.readData(withTimeout: -1, tag: 0)
    }

Далее запускаю метод в subview через Notification и передаю туда переменную через appDelegate.shared.

NotificationCenter.default.addObserver(self, selector: #selector(isConnected), name: NSNotification.Name(rawValue: "ReceivedData"), object: nil)

@objc func isConnected() {
        let statusLbl = appDelegate.dataRx
        print("Status Label Before: \(statusLbl)")
        if statusLbl == "ok" { // далее код не выполняется
            statusLabel.text = statusLbl
            print("Status Label After: \(statusLbl)")
        }
        else { print("Error") }

Результаты с консоли:

Status Label Before: ok

Error

Status Label Before: ok

Error

Получается что условие в операторе не выполняется и переходит в else. Но при этом сама переменная передается.


Ответы (2 шт):

Автор решения: Denis Shchigolev

скорее всего в ответе содержатся пробелы, как вариант заменить их и уже после выполнять проверку:

statusLbl.replacingOccurrences(of: " ", with: "")
        if statusLbl == "ok" { 
            statusLabel.text = statusLbl
            print("Status Label After: \(statusLbl)")
        }
→ Ссылка
Автор решения: Эникейщик

Если if statusLbl == "ok" не работает, а if statusLbl.hasPrefix("ok"), при после ok находится что-то еще, невидимое при печати. Например, символ конца строки или любой другой служебный символ. Поскольку значения приходит с сервера, то это неудивительно и даже ожидаемо.

→ Ссылка