100 days of swiftui: 28
https://www.hackingwithswift.com/100/swiftui/28
NavigationStack {
Form {
Section("When do you want to wake up?") {
DatePicker("Enter a time to wake up", selection: $wakeUpTime, displayedComponents: .hourAndMinute)
.labelsHidden()
}
Section("Desired amount of sleep") {
Stepper("\(sleepAmount.formatted()) hour(s)", value: $sleepAmount, in: 5...12, step: 0.5)
}
Section("Daily coffee intake") {
Stepper("^[\(coffeeAmount) cup](inflect: true)", value: $coffeeAmount, in: 0...20)
}
}
.navigationTitle("Better Rest")
.toolbar {
Button(action: {
calculateBedTime()
}, label: {
Text("Calculate")
})
}
}
코드 파일
https://github.com/treesofgroo/Ios-BetterRest/commit/fed5484bb61391bdece415463cae1f06a28cb4c5
Section("Daily coffee intake") {
Picker("coffee amount", selection: $coffeeAmount, content: {
ForEach(0..<11) { cup in
Text(cup < 2 ? "\(cup) cup" : "\(cup) cups")
}
})
.labelsHidden()
코드 파일
https://github.com/treesofgroo/Ios-BetterRest/commit/2528f449f25b9cd8fdcb822defd1f3ed4fe8bfa3
변수 recommendedSleepTime
을 설정해서 화면 제일 아래에서 alert이 없어도 나타날 수 있게 설정했다.
var recommendedSleepTime: String {
do {
let config = MLModelConfiguration()
let model = try SleepCalculator(configuration: config)
let components = Calendar.current.dateComponents([.hour, .minute], from: wakeUpTime)
let hour = (components.hour ?? 0) * 60 * 60
let minute = (components.minute ?? 0) * 60
let prediction = try model.prediction(wake: Double(hour + minute), estimatedSleep: sleepAmount, coffee: Double(coffeeAmount))
let sleepTime = wakeUpTime - prediction.actualSleep
return sleepTime.formatted(date: .omitted, time: .shortened)
} catch {
return "Sorry, there was a problem calculating your bedtime."
}
}
코드 파일
https://github.com/treesofgroo/Ios-BetterRest/commit/cc5ee08dc43494e91a61ed210431c209c55ed70f