トップ 最新 追記

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2024-11-27 [SwiftUI] Thermostat

ヒレガス本『Cocoa Programming for OS X (5th Edition)』のサンプルThermostatをSwiftUIで実装してみた。

Thermostat

このサンプルは、KVCとKVO、Bindingsが題材になったものだが、SwiftUIの仕組み自体がこの機能を活用したものなので、今まで学習した内容で対応できた。

struct ContentView: View {
    @State private var internalTemperature: Double = 68.0
    @State private var isOn = true
    var body: some View {
        HStack {
            VStack {
                Slider(value: $internalTemperature, in: 0 ... 212, step: 1.0)
                    .disabled(!isOn)
                Text(String(format: "%.0lf", internalTemperature))
            }
            .padding()
            VStack {
                Spacer()
                Button("Warmer") {
                    internalTemperature += 1.0
                }
                .disabled(!isOn)
                Spacer()
                Button("Cooler") {
                    internalTemperature += -1.0
                }
                .disabled(!isOn)
                Spacer()
                Button("Power") {
                    isOn = !isOn
                }
                .buttonStyle(.borderless)
            }
            .padding()
        }.padding()
    }
}

サンプルは縦方向のスライダーだったが、SwiftUIのSliderは横方向のみなので、ここは諦めて横方向のスライダーとした。

_ 【ソースコード】

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/multiplatform/Thermostat - GitHub

トップ 最新 追記