ในบทที่ผ่านๆมาเราได้เรียนเรื่องการประกาศตัวแปรแบบต่างๆกันมาแล้ว ใน Swift เองยังมีการประกาศตัวแปรที่สามารถเพิ่มเงื่อนไขหรือเขียนข้อกำหนดต่างๆเข้าไปในตัวแปรได้อีก เรียกว่า Computed Properties
ใน Swift จะมี ตัวแปรแบบ Computed Properties คือการที่เราเพิ่มความสามารถให้กับตัวแปรที่ต้องการ โดยการใช้คำสั่ง get และ set เข้าไป ทำให้ลดการเขียนลงได้พอสมควรเพราะเงื่อนไขบางอย่างสามารถจบลงที่การเรียกใช้หรือตั้งค่าให้กับตัวแปรนั้นๆได้เลย ลองดูตัวอย่างจาก class exchange_rate กันก่อน


จากตัวอย่าง : class exchange_rate โดยจะแสดงอัตราแลกเปลี่ยนจากสกุลเงินไทยไปยังสกุลอื่นๆ โดยใช้ตัวแปร
– dThaiBaht เป็นตัวแปรประเภท Double เพื่อรองรับการคำนวนอัตราแลกเปลี่ยน
– dUSDollar ,dEuro,dJapanYen เป็นตัวแปรสำหรับสกุลเงินของ US,Euro และญี่ปุ่นโดยมีการนำ get และ set มาใช้
get | คำสั่ง get จะถูกประมวลผลเมื่อตัวแปรถูกเรียกใช้งาน |
set | คำสั้ง set จะถูกประมวลผลเมื่อตัวแปรถูกกำหนดค่าใหม่ลงไป |
นำมาลองใช้งานดู

มาดูผลที่ได้

สรุปจากการทำงานของ get และ set ที่ได้จากตัวอย่าง (อ้างอิงแค่ตัวแปร dUSDollar เพราะที่เหลือทำงานเหมือนกัน)
1 | เมื่อต้องการรู้สกุลเงินของ US (dUSDollar) ระบบจะใช้คำสั่ง get ในการเอาค่าสกุลเงินของไทยไปหารกับอัตราแลกเปลี่ยน(35 บาท / 1 ดอล) |
2 | เมื่อมีการเปลี่ยนแปลงค่าใน dUSDollar ระบบจะใช้คำสั่ง set ในการเอาค่าสกุลเงินของ US ไปคูณกับจำนวนเงินบาท |
จะเห็นได้ว่าการใช้ Get,Set เหมือนเราสร้าง function ย่อยๆใส่ใว้ในตัวแปรเพื่อให้มันทำงานแบบอัตโนมัติได้เลยทีเดียว
นอกจากนี้แล้วเรายังสามารถเฝ้าดูการเปลี่ยนแปลงค่า(property observers) ที่เกิดขึ้นภายในตัวแปรได้อีก โดยใช้คำสั่ง willSet คือเมื่อตัวแปรกำลังจะถูกกำหนดค่าให้ กับ didSet คือเมื่อตัวแปรถูกกำหนดค่าลงไปแล้ว ลองดูตัวอย่างกันครับ

willSet | เงื่อนไขจะถูกประมวลผลก่อนกำหนดค่าให้ตัวแปร |
didSet | เงื่อนไขจะถูกประมวลผลเมื่อมีตัวแปรถูกกำหนดค่าใหม่ให้ |
ข้อจำกัดของการใช้งาน Computed Properties และ Property Observers ใน Swift
1.มี Get แล้ว ก็ต้องมี Set

2.ไม่สามารถใช้ get กับตัวตัวเองได้



3.ตอนใช้ Property Observers (willSet ,didSet) ไม่ใส่มาใช้คำสั่ง set ได้

4.จะใช้ get ก็ต้องมี return ทุกครั้ง

ผ่านไปสำหรับบทนี้นะครับ ลองเอาไปใช้งานดูมีประโยชน์อยู่พอสมควรและ Computed Properties นี้ก็ยังลดการใช้การ Function ได้เหมือนกัน
แนะนำติชมบทความเกี่ยวกับการเรียน Swift ได้ตลอดนะครับ ที่ thaiswiftclass@gmail.com และทาง https://www.facebook.com/thaiswiftclass