こんにちは!
Swiftの学習を始め早6ヶ月のennuです。
今回はおもしろそうなお題を見つけたので私も電子レンジ(温め機能なし)を作ってみることにしました!
リファクタリングのため、コメントでアドバイスいただけると嬉しいです
要件
・電子レンジのワット数は900,600,200とする
・今回は、安全のために11分以上は加熱できないものとする
・タイマーの実装
・分と秒の概念を実装
・残り時間の出力
・残り時間が0秒になったら、「温め終了です」と出力し、タイマーを停止
・温める時間が11分以上だと「温めを開始できません!」、
「タイマーを10分59秒以内に設定してください」と出力
・タイマーが10分59秒以内にセットされたら、温め可能フラグを返し、「温め開始!!」を出力
・選択されたワット数を出力
要件は参照記事と同じです。
環境はplaygroundです。
いざ実装!
import UIKit
class MicroWave {
enum WattTipe: String {
case watt900 = "900w"
case watt600 = "600w"
case watt200 = "200w"
}
let minute: Int
let second: Int
let wattTipe: WattTipe
init(minute: Int, second: Int, wattTipe: WattTipe) {
self.minute = minute
self.second = second
self.wattTipe = wattTipe
}
func printDescription() {
print("ワット数: \(wattTipe.rawValue), 温め時間: \(minute)分\(second)秒")
}
func setTimer() {
printDescription()
//温め時間の指定
guard minute <= 10 else {
print("温めを開始できません!タイマーを10分59秒以内に設定してください")
return
}
guard second <= 59 else {
print("秒数は0〜59の範囲で指定してください")
return
}
print("温め開始!!")
//温め時間を秒に変換
let timer = minute * 60 + second
//Timerのセット
for i in 1...timer {
sleep(1)//1秒止める
//残り時間の出力
if i < timer {
let remainingMinute = (timer - i) / 60
let remainingSecond = (timer - i) - remainingMinute * 60
print("残り時間: \(remainingMinute)分\(remainingSecond)秒")
} else {
print("温め終了です")
}
}
}
}
使ってみる
let timer1 = MicroWave(minute: 30, second: 85, wattTipe: .watt900)
timer1.setTimer()
//ワット数: 900w, 温め時間: 30分85秒
//温めを開始できません!タイマーを10分59秒以内に設定してください
let timer2 = MicroWave(minute: 10, second: 85, wattTipe: .watt600)
timer2.setTimer()
//ワット数: 600w, 温め時間: 10分85秒
//秒数は0〜59の範囲で指定してください
let timer3 = MicroWave(minute: 0, second: 3, wattTipe: .watt200)
timer3.setTimer()
//ワット数: 200w, 温め時間: 0分3秒
//温め開始!!
//残り時間: 0分2秒
//残り時間: 0分1秒
//温め終了です
- 出力は要件通りに動いています。(温め時間の表示は追加しました)
-
timer3
では1秒おきに残り時間を出力することができました!
所感
- フラグの使いどころがわからず、実装しない形になってしまったので今後使い方を勉強していきたい。
- classやenumの使い方をよく理解していなかったので再学習するきっかけになってよかった。
- タイマーが案外簡単に作れることがわかった。
- とても勉強になったので他のお題にも挑戦してみたい。
まとめ
書籍などで一通りSwiftの勉強したけど使い方がいまいちわからないな〜と感じる初学者の方には良いアウトプットになると思います。ぜひ挑戦してみてください!