Toggle เป็นหนึ่งใน UI Control พื้นฐานที่ใช้สำหรับควบคุมสถานะแบบทวิภาค (Binary State) เช่น เปิด–ปิด (On/Off), อนุญาต–ไม่อนุญาต (Enable/Disable) หรือ ใช้งาน–ไม่ใช้งาน (Active/Inactive)
ในเชิงโครงสร้าง SwiftUI ออกแบบ Toggle ให้ทำงานผ่านกลไก Binding กล่าวคือ ตัวควบคุมจะไม่เก็บค่าด้วยตนเอง แต่ผูกกับตัวแปรสถานะ (@State, @Binding, หรือ Observable Object) เมื่อผู้ใช้เปลี่ยนสถานะ ค่าในตัวแปรจะถูกปรับ และ View ที่อ้างอิงค่านั้นจะถูกเรนเดอร์ใหม่โดยอัตโนมัติ แนวทางนี้ช่วยลดความซับซ้อนของการจัดการเหตุการณ์ (Event Handling) แบบเดิม และส่งเสริมรูปแบบการพัฒนาเชิงประกาศ (Declarative Programming)
โครงสร้างพื้นฐานของ Toggle
รูปแบบพื้นฐานของ Toggle มีองค์ประกอบหลักสองส่วน ได้แก่
Label – ส่วนแสดงข้อความหรือ View ประกอบ
Binding Value – ตัวแปรชนิด Boolean ที่ผูกกับสถานะของสวิตช์
struct ContentView: View {
@State private var isWifiEnabled: Bool = false
var body: some View {
VStack(spacing: 20) {
Toggle("Wi-Fi", isOn: $isWifiEnabled)
Text("Wi-Fi is \(isWifiEnabled ? "On" : "Off")")
}
.padding()
}
}
SwiftUI รองรับ View Composition ภายใน Label ทำให้ Label ไม่จำกัดเฉพาะข้อความ นักพัฒนาสามารถประกอบ View ได้อย่างอิสระ เช่น
การตกแต่ง Toggle ด้วย Modifier
การกำหนดรูปแบบด้วย .toggleStyle เช่น .toggleStyle(.automatic) .toggleStyle(.switch) หรือ .toggleStyle(.button)
การกำหนดสีด้วย .tint
การซ่อน Label
การควบคุมพฤติกรรมด้วย .disabled
การตอบสนองต่อการเปลี่ยนค่า
ในระดับที่สูงขึ้น สามารถกำหนดรูปแบบเองโดย conform กับ ToggleStyle
ตัวอย่างการนำไปใช้งาน