splits/Splits/ContentView.swift

98 lines
2.7 KiB
Swift

//
// ContentView.swift
// Splits
//
// Created by Isaac Greene on 4/3/22.
//
import SwiftUI
import Foundation
struct ContentView: View {
var SISystem = ["km","mi"]
var minutes = Array(0...300)
var times = Array(0...300).map { String($0) }
@State var timeMinutes: String = ""
@State var timeSeconds: String = ""
@State var selectedSystem: String = "km"
@State var distance: String = ""
var body: some View {
VStack {
VStack {
TextField("Enter distance here", text: $distance)
.padding()
.keyboardType(.decimalPad)
.textFieldStyle(.roundedBorder)
}
VStack {
Text("Unit of measurement:")
Picker("System of measurement", selection: $selectedSystem, content: {
ForEach(SISystem, id: \.self, content: { unit in
Text(unit)
})
})
.pickerStyle(.segmented)
.frame(minWidth: 60, maxWidth: 300)
HStack {
VStack {
Text("Total Minutes")
TextField("Enter minutes here", text: $timeMinutes)
.keyboardType(.numberPad)
.textFieldStyle(.roundedBorder)
}
.frame(minWidth: 100)
.padding(.trailing, -15)
.padding()
VStack {
Text("Total Seconds")
TextField("Enter seconds here", text: $timeSeconds)
.keyboardType(.numberPad)
.textFieldStyle(.roundedBorder)
}
.frame(minWidth: 100)
.padding(.leading, -15)
.padding()
}
PaceResults(timeMinutes: $timeMinutes, timeSeconds: $timeSeconds, selectedSystem: $selectedSystem, distance: $distance)
}
}
}
}
struct PaceResults: View {
@Binding var timeMinutes: String
@Binding var timeSeconds: String
@Binding var selectedSystem: String
@Binding var distance: String
var body: some View {
let timeMinutesDouble = Double(timeMinutes) ?? 0.0
let timeHours = String(Int(timeMinutesDouble / 60))
let convertedSeconds = (Double(timeSeconds) ?? 0) * (1+(2/3))
let timeSecondsInt = Int(timeSeconds) ?? 0
let timeSecondsUnderSixty = (timeSecondsInt > 60 ? Int(timeSecondsInt / 60) : timeSecondsInt)
let timeMinutesInt = (Int(timeMinutes) ?? 0) + (Int(timeSecondsUnderSixty))
let timeMinutesUnderSixty = timeMinutesInt - ((Int(timeHours) ?? 0) * 60)
let leadingZeros = String(format: "%02d:%02d", timeMinutesUnderSixty, timeSecondsInt)
let actualTime = timeMinutesDouble + (convertedSeconds / 100)
let pace = actualTime / (Double(distance) ?? 1)
let paceString = String(format: "%.2f", pace)
VStack {
Text("Distance: \(distance)\(selectedSystem)")
Text("Total time: \(timeHours):\(leadingZeros)")
Text("\(paceString) minutes per \(selectedSystem)")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}