Mercurial > public > simoleon
view Simoleon/Helpers/ConversionBox.swift @ 150:6eac99e99b96
Add error handling to read json function
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Thu, 19 Aug 2021 19:12:56 +0100 |
parents | 1fd9e27df5be |
children | 2584fd74235a |
line wrap: on
line source
// // ConversionBox.swift // Simoleon // // Created by Dennis Concepción Martín on 18/07/2021. // import SwiftUI struct ConversionBox: View { @Binding var currencyPair: String @Binding var amountToConvert: String @Binding var price: Double @Binding var showingConversion: Bool @Binding var amountIsEditing: Bool var body: some View { VStack(alignment: .leading) { let currencyMetadata: [String: CurrencyMetadataModel] = try! read(json: "CurrencyMetadata.json") let currencies = currencyPair.split(separator: "/") Text("\(currencyMetadata[String(currencies[0])]!.name) (\(String(currencies[0])))") .font(.callout) .fontWeight(.semibold) .padding(.top, 40) ZStack(alignment: .trailing) { TextField("Enter amount", text: $amountToConvert) { startedEditing in if startedEditing { withAnimation { amountIsEditing = true } } } onCommit: { withAnimation { amountIsEditing = false } } .keyboardType(.decimalPad) .font(Font.title.weight(.semibold)) .lineLimit(1) .accessibilityIdentifier("ConversionTextField") } Divider() Text("\(currencyMetadata[String(currencies[1])]!.name) (\(String(currencies[1])))") .font(.callout) .fontWeight(.semibold) .padding(.top, 10) if showingConversion { Text("\(makeConversion(), specifier: "%.2f")") .font(Font.title.weight(.semibold)) .lineLimit(1) .padding(.top, 5) } else { ProgressView() .padding(.top, 5) } } } /* if the amount can be converted to Double: * Return amount else: * Return zero */ func makeConversion() -> Double { if let amountToConvert = Double(amountToConvert) { return amountToConvert * price // Conversion } else { return 0 } } } struct ConversionBox_Previews: PreviewProvider { static var previews: some View { ConversionBox( currencyPair: .constant("USD/GBP"), amountToConvert: .constant("1000"), price: .constant(1), showingConversion: .constant(false), amountIsEditing: .constant(false) ) } }