I have looked at different answers to this question but I am confused. I am relatively new to Swift. I am currently working on my senior project for school. Would love someone to answer the question but also go into detail. The current behavior only does 0-9. I can't get it to do the number 10.
struct ContentView: View {
// Private vars for tracking
@State private var hoursSlept = 0;
// *** What happens if the user enters something other than an integer/double?
@State private var depressedMood = ""
@State private var elevatedMood = ""
@State private var anxietyMood = ""
@State private var irritabilityMood = ""
@State private var maxLength = 1;
// Var for button
@State private var enterButtonPress = false
var body: some View {
VStack {
NavigationView {
Form {
// Hours slept last night (0-24)
Stepper(value: $hoursSlept, in: 0...24, label: {
Text("Hours slept last night: \(self.hoursSlept)")
})
TextField("Depression 0-10", text: $depressedMood)
.keyboardType(.numberPad)
.onReceive(Just(depressedMood)) {
guard !$0.isEmpty else {
self.depressedMood = ""
return
}
if let value = Int($0.filter(\.isWholeNumber).prefix(maxLength)) {
self.depressedMood = String(value)
}
}
TextField("Elevation 0-10", text: $elevatedMood)
.keyboardType(.numberPad)
.onReceive(Just(elevatedMood)) {
guard !$0.isEmpty else {
self.elevatedMood = ""
return
}
if let value = Int($0.filter(\.isWholeNumber).prefix(maxLength)) {
self.elevatedMood = String(value)
}
}
TextField("Anxiety 0-10", text: $anxietyMood)
.keyboardType(.numberPad)
.onReceive(Just(anxietyMood)) {
guard !$0.isEmpty else {
self.anxietyMood = ""
return
}
if let value = Int($0.filter(\.isWholeNumber).prefix(maxLength)) {
self.anxietyMood = String(value)
}
}
TextField("Irritability 0-10", text: $irritabilityMood)
.keyboardType(.numberPad)
.onReceive(Just(irritabilityMood)) {
guard !$0.isEmpty else {
self.irritabilityMood = ""
return
}
if let value = Int($0.filter(\.isWholeNumber).prefix(maxLength)) {
self.irritabilityMood = String(value)
}
}