Hello everyone. I just start learning SwiftUI. Today's challenge I make a Temperature Conversion.
I think it work not so good.so there have two question for me.
First is when I use @FocusState with NavigationView, the Xcode's preview dont work but I can build succeful.I dont know just I have this problem? my Xcode Version is Version 13.2.1 (13C100).macOS is 12.1
Second is when I used FocusState but sometime the keyboard did not come out. I can just see "Done" button at right side on the screen without keyboard.
Here is my code, can someone help me? thx
//
// ContentView.swift
// Temperature Conversion
//
// Created by zsjng on 2022/1/21.
//Celsius, Fahrenheit, or Kelvin
import SwiftUI
struct ContentView: View {
@State private var inputNumber:Double = 0
@State private var inputUnit:String = "°C"
@State private var outputUnit:String = "F"
@FocusState private var isOnFocus:Bool
var outputNumber:Double {
var answer = 0.0
if inputUnit == "°C" && outputUnit == "F"{
answer = inputNumber * 1.8 + 32.0
}else if inputUnit == "F" && outputUnit == "°C"{
answer = (inputNumber - 32.0) / 1.8
}else if inputUnit == "°C" && outputUnit == "K"{
answer = inputNumber + 273.15
}else if inputUnit == "K" && outputUnit == "°C"{
answer = inputNumber - 273.15
}else if inputUnit == "F" && outputUnit == "K"{
answer = (inputNumber + 459.67) * 5.0 / 9.0
}else if inputUnit == "K" && outputUnit == "F"{
answer = inputNumber * 1.8 - 459.67
}else{
answer = inputNumber
}
return answer
}
let Units:[String] = ["°C","F","K"]
var body: some View {
NavigationView{
Form{
Section{
TextField("Please input", value: $inputNumber, format:.number)
.keyboardType(.decimalPad)
.focused($isOnFocus)
}header: {
Text("Please input there")
}
Picker("Input Unit",selection:$inputUnit){
ForEach(Units,id:\.self){
Text($0)
}
}
Picker("Output Unit",selection:$outputUnit){
ForEach(Units,id:\.self){
Text($0)
}
}
Text("\(inputNumber.formatted())" + "\(inputUnit) = " + "\(outputNumber.formatted())" + "\(outputUnit)")
}.navigationTitle("Temperature Change")
.toolbar{
ToolbarItemGroup(placement: .keyboard){
Spacer()
Button("Done"){
isOnFocus = false
}
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}