Как удалить необязательный из строкового значения в swift?

#swift #optional

#swift #тип параметра

Вопрос:

В коде я не могу удалить необязательный из значения внутри lbltotalamount . Значение в lblTotalAmount не удаляет из него свое необязательное значение. Почему? Значение в grandtotal необязательном удаляется, но когда я присваиваю его метке, оно снова возвращает необязательное значение. Получает lblTottalAmount необязательное значение. Я хочу его удалить.

 if success == false {
    var  grandtotal: Any?  = value["total"]
    if grandtotal != nil {
        print("O!O!O!O/(grandtotal!)")
        grandtotal = String(describing: grandtotal)
        self.lblTotalAmount.text = ([grandtotal]) as! String  // (here I am not able to remove optional)
    }
  

Комментарии:

1. Какой тип grandtotal должен быть?

2. общий итог должен быть string @v

3. Тогда почему вы создаете строку из строки и принудительно преобразуете строку в строку? Кстати, приведение [String] к String все равно не работает. Разве это не grandtotal числовое значение Int или Double ?

4. grandtotal может быть числовым или плавающим, но я хочу, чтобы он был строковым, код grandtotal = String(описание: grandtotal) Я просто пробовал другой подход, чтобы заставить мой код работать,,, Я хочу результат в строке self.lblTotalAmount.text = ([grandtotal]) как! Строка из этой строки, сэр

5. это также дает мне необязательный:——>if grandtotal != nil{ print(«O!O!O!O/(grandtotal!)») var g: String ? g = String(описание: grandtotal) //grandtotal = String(описание: grandtotal) self.lblTotalAmount.text = g как! Строка }

Ответ №1:

Проблема в строке

 grandtotal = String(describing: grandtotal)
  

Вы проверяете nil , но не разворачиваете значение, поэтому оно по-прежнему является необязательным.
И вы злоупотребляете String(describing . Никогда не используйте его для типов, в которые можно преобразовать String с init помощью метода.

Всегда используйте условное понижение

 if success == false {
   if let grandtotal = value["total"] as? Double {
       self.lblTotalAmount.text = String(grandtotal)
   }
}