復習 - 温度ログ
CoddyのSwiftジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/57。
チャレンジ
難しい小さな温度ログを作成してください。列挙型 Scale(celsius、fahrenheit、生の値は C と F)と、温度を摂氏で保存する構造体 Reading を完成させてください。Reading には、20C や 68F のようなテキストを読み取り、それ以外の場合は nil を返す静的ファクトリ parse(_:)、計算プロパティ fahrenheit、そして 20.0C / 68.0F を返す計算プロパティ label があります。クラス TemperatureLog は読み取り値の配列と、didSet オブザーバーを持つ highest プロパティを保持し、新しい最高記録が出るたびに new high 25.0C として記録します。
提供されたコードは、解析された各読み取り値をログに追加し(または bad reading: x と出力し)、各読み取り値のラベルを出力し、最後にオブザーバーが収集した記録を1行ずつ出力します。
コードは Scale.swift、Reading.swift、TemperatureLog.swift に記述します。main.swift には提供された入力/出力コードが含まれており、編集できません。
自分で試してみよう
// 提供された入出力コード: そのままにしておく
var input: [String] = []
while let line = readLine() { input.append(line) }
let log = TemperatureLog()
for line in input {
if let r = Reading.parse(line) {
log.add(r)
print(r.label)
} else {
print("bad reading: \(line)")
}
}
for record in log.records { print(record) }
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド