Search code examples
stringformattingswiftuinan

NaN is shown when a calculation has no value inside. How can "0" or "-" be displayed instead in SwiftUI?


If a calculation is performed in SwiftUI and no values are added to the TextField, it displays "-NaN" (Not a Number?) instead.

How can a value (for example "0", "-") be displayed until values are inserted?

I have tried adding @State private var display = 0 but it displayed both values...

Example code:

 struct ContentView: View {
    @EnvironmentObject var userData: UserData
        
    var Brutto: Double {
        let price = Double(userData.BPrice) ?? 0
        let rent = Double(userData.Rent) ?? 0
            
        let Brutto = rent * 12 / price * 100
            
        return Brutto
    }
    
    var body: some View {
        VStack {            
            Text ("\(Brutto, specifier: "%.1f")")
        }

// The UserData File:

class UserData : ObservableObject {

  private static let userDefaultBPrice = "BPrice"
  private static let userDefaultRent = "Rent"


  @Published var BuyingPrice = UserDefaults.standard.string(forKey: UserData.userDefaultBPrice) ?? "" 
  {
    didSet {
      UserDefaults.standard.set(self.BPrice, forKey: UserData.userDefaultBPrice)
    }
  }

  @Published var Rent = UserDefaults.standard.string(forKey: UserData.userDefaultRent) ?? "" {
    didSet {
      UserDefaults.standard.set(self.Rent, forKey: UserData.userDefaultRent)
    }
  }
  private var canc: AnyCancellable!

}

Image Displaying "NaN" when no value is added in the calculation field(s).

Thanks


Solution

  • Here is possible approach

    VStack {
        Text ("\(Brutto.isNaN ? 0 : Brutto, specifier: "%.1f")")
    }