Неоднозначная ссылка на «<» внутри условного |стриж - PullRequest
1 голос
/ 20 октября 2019

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

Структура JSON выглядит следующим образом:

struct TheStructure: Codable {
    var NUM1, NUM2: String

    enum CodingKeys: String, CodingKey {
        case NUM1 = "Number1"
        case NUM2 = "Number2"
    }
}

Проблема заключается вAPI, обеспечивающий вывод информации NUM1 и NUM2 в виде строки, например, вместо 1, он делает «1». Это вынуждает меня декодировать оба значения как строки и приводить к тому, что приведенное ниже условие не работает. Как это можно решить?

Я получаю ошибку:

Неоднозначная ссылка на операторную функцию '<' </p>

Значение портфеля следующее let structureVariable: TheStructure

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if structureVariable.NUM1 < 1 {

            let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Del1") as! TableViewController1
            let navigationController = UINavigationController(rootViewController: controller)
            self.present(navigationController, animated: true, completion: nil)
            tableView.deselectRow(at: indexPath, animated: false)

        } else {

            let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Del2") as! TableViewController2
            let navigationController = UINavigationController(rootViewController: controller)
            self.present(navigationController, animated: true, completion: nil)
            tableView.deselectRow(at: indexPath, animated: false)

        }
}

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Вы не можете сравнить строку с int, поэтому замените

if structureVariable.NUM1 < 1 {

на

if let res = Int(structureVariable.NUM1) , res < 1 {

Или это, если вы уверены, что значение 100% будет Int

if Int(structureVariable.NUM1)! < 1 {

Лучше сделать логику

guard let res = Int(structureVariable.NUM1) else { return } 
if res < 1 {
}
else {
}
0 голосов
/ 20 октября 2019

Вы можете привести тип к Int следующим образом:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

 if let num = Int(structureVariable.NUM1), num < 1 {

       let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Del1") as! TableViewController1
       let navigationController = UINavigationController(rootViewController: controller)
       self.present(navigationController, animated: true, completion: nil)
       tableView.deselectRow(at: indexPath, animated: false)

  } else {

      let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Del2") as! TableViewController2
      let navigationController = UINavigationController(rootViewController: controller)
      self.present(navigationController, animated: true, completion: nil)
      tableView.deselectRow(at: indexPath, animated: false)

      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...