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 шт):
скорее всего в ответе содержатся пробелы, как вариант заменить их и уже после выполнять проверку:
statusLbl.replacingOccurrences(of: " ", with: "")
if statusLbl == "ok" {
statusLabel.text = statusLbl
print("Status Label After: \(statusLbl)")
}
Если if statusLbl == "ok" не работает, а if statusLbl.hasPrefix("ok"), при после ok находится что-то еще, невидимое при печати. Например, символ конца строки или любой другой служебный символ. Поскольку значения приходит с сервера, то это неудивительно и даже ожидаемо.