September 18, 2015

Swift: Enums กับ Associated Values

ใน Objective-C เราสามารถอ้างถึงค่าของสมาชิกใน enum ได้ ซึ่งเราจะได้ integer กลับมา แต่ว่าด้วยฟีเจอร์ associated value ของ Enum ใน Swift นั้นทำให้เราสามารถกำหนดค่าที่ต่างชนิดกันได้ให้กับสมาชิกใน enum เช่น สมาชิกใน enum ตัวหนึ่งอาจเก็บค่าชนิด Integer ส่วนอันหนึ่งเก็บค่าชนิด String  และอีกอย่างหนึ่งก็คือค่าของสมาชิกใน enum ที่ประกาศเป็น associated value จะถูกกำหนดให้ตอนที่ค่าของ enum ถูกสร้างขึ้นมา ไม่ใช่ตอนประกาศ เพราะตอนประกาศเราจะประกาศแค่ชื่อ และชนิดข้อมูลที่เก็บเท่านั้น ส่วนตัวอย่างที่หลายที่มักหยิบยกมากัน ก็คือการนำไปใช้กับรูปแบบโค้ดที่ต้อง return ค่ากลับออกมาต่างชนิดกันนั่นเอง

ยกตัวอย่างโค้ดการทำงานของบัญชีธนาคาร ที่มีจำนวนเงินเก็บไว้จำนวนหนึ่ง และมี method ที่ใช้สำหรับถอนเงินออกมา โดยที่ ถ้าจำนวนเงินที่ต้องการถอนมีจำนวนมากกว่าเงินที่เก็บไว้ ก็จะ return error message string ออกมา แต่ถ้าหากจำนวนเงินสามารถถอนออกมาได้จริง ก็จะ return จำนวนเงินคงเหลือออกมา

ถึงตรงนี้เราจะพบว่าค่าที่ถูก return กลับออกมานั้นมี type ที่แตกต่างกัน อันหนึ่งเป็น String และอีกอันหนึ่งเป็น Integer เจอแบบนี้ เราสามารถใช้ enum เข้ามาช่วยได้โดยการออกแบบ enum เตรียมไว้ก่อนได้ดังนี้