Недопустимый размер кадра (отрицательный или не конечный) при попытке определить высоту кадра капсулы в SwiftUI

#swift #swiftui #frame

#быстрый #свифтуи #рамка #swift #swiftui #кадр

Вопрос:

Я пытаюсь определить высоту капсулы в SwiftUI из структуры da, которая преобразуется String в double нее и выполняет некоторые вычисления над ней, как в примере ниже.

 struct graphLenght{
       var energiaOne: String
       
       init(energiaOne: String){
           self.energiaOne = energiaOne
           
       }
       
       func energyOne() -> Double{
           let formatter = NumberFormatter()
           formatter.locale = Locale(identifier: "pt_BR")
           formatter.numberStyle = .decimal
           let energyOne = formatter.number(from: energiaOne) ?? 00

           return Double(truncating: energyOne)
       } 

       func maxValue() -> Double{
           return max(energyOne(), energyTwo(), energyThree())
       }
       
       func maxValueGraph() -> Double{
           if maxValue() <= 0 {
               return 1
           }else{
           return round(maxValue() * 1.1)
           }
       }
       
       func lenghtConcrete() -> CGFloat{
           return CGFloat(((225 * energyOne())/maxValue()))
       }
  

хотя, когда я пытаюсь использовать graph.lenghtConcrete in .frame (как показано ниже), продолжает отображаться предупреждение о недопустимом размере кадра (отрицательном или не конечном).

 Capsule()
    .frame(width: 14, height: abs(CGFloat(graph.lenghtConcrete())))
    .foregroundColor(.blue)
  

Одно наблюдение, возврат maxValueGraph() которого всегда равен 1

Как я могу решить эту проблему??

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

1. Вы проверили, есть ли formatter.number(from: energiaOne) nil ? Потому что тогда energyOne() вернется 0 , и я предполагаю, что остальные похожи, поэтому maxValue() будут 0 . Затем вы будете делить на ноль, lengthConcrete() который не является числом.

2. У меня есть. Когда я попытался запустить код в playground, значения были правильно преобразованы из string в double с помощью func energiaOne()