Class ของเราที่สร้างไปในสองบทก่อนหน้า จะยังไม่ได้ลงลึกในการเข้าถึงตัวแปร โดย OOP มี ฟีเจอร์ชื่อว่า Encapsulation ซึ่งหมายถึงว่าการห่อหุ้ม แบบยาที่ถูกห่อใว้ใน แคปซูลนั่นเอง โดยเรานำเอาฟีเจอร์ Encapsulation มาใช้กับการเขียนโปรแกรมเพื่อจำกัดการเข้าถึงตัวแปรสำหรับอ่านหรือเปลี่ยนแปลงค่า ในส่วนของ Access Modifiers หรือวิธีการเข้าถึงตัวแปร ซึ่งสามารถแบ่งเป็น 3 หมวดได้ตามนี้
private | คือตัวแปรใช้ได้ภายใน Class เท่านั้นไม่ให้ใครมาเปลี่ยนค่ามันเองได้ตรงๆ |
Internal | คือตัวแปรใน Class ทั่วไปใช้ได้กับ Object ทั่วๆไป |
public | ตัวแปรที่สามารถนำไปใช้ที่ใดก็ในโปรแกรม |
ลองมาสร้างตัวอย่างเพื่อให้เห็นภาพชัดเจนยิ่งขึ้น โดยเราจะลองจำลองร้านขายของมาซักร้านนึง ให้ทักทายลูกค้า ตั้งราคาขายและปรับราคาคามส่วนลดที่ลุกค้าต้องการได้ จะใช้ชื่อว่า clsShopKeeper
ขั้นแรกให้เรา Add Class เข้ามาใน Project ก่อนครับ โดยการ Click ขวาแล้วเลือก New File..

จากนั้นเลือกประเภทของ File ให้เลือก Cocoa Class

ตั้งชื่อให้เรียบร้อย อย่าลืมเลือก Language เป็น Swift ด้วยนะครับ

ทีนี่ก็เริ่มเขียน Code

ในส่วนแรก เราจะประกาศตัวแปร ใว้ 5 ตัว
sTitle | เป็นตัวอย่างการใช้ Public แบบ String สำหรับแสดงผลทั่วไปไตเติ้ลของโปรแกรม |
sPromotion | เป็น internal แบบ String ใช้สำหรับตั้งชื่อโปรโมชั่นของร้าน |
dProductPrice | เป็น private แบบ Double เอาใว้ตั้งราคาสินค้าในร้าน (ร้านเราจะขาย USB Drive) |
dMaxDiscount | เป็น private แบบ Double ไว้ตั้งราคาสำหรับลูกค้าขอส่วนลดได้สูงสุด |
sName | เป็น Private แบบ String ใว้ตั้งชื่อร้าน |
จากนั้นเราจะให้ตั้งค่าเริ่มต้นทั้ง ชื่อ ,รายการโปรโมชั่น และ ราคาขาย ด้วย init()
มาถึงในส่วน Method ของ Class หรือ Function

อธิบาย Method
Title | ใว้สำหรับแสดงส่วน Title ของโปรแกรม |
sayHello | ใว้แสดงข้อความทักทายลูกค้า |

อธิบาย Method
setDiscount | ใว้สำหรับตั้งค่าส่วนลด เราจะไม่อนุญาตให้มีเปลี่ยนค่า dMaxDiscount ได้ตรงๆต้องผ่าน Method นี้เท่านั้นเพื่อเช็กเงื่อนไขที่เราต้องการให้ถูกต้องเสียก่อน |
setPrice | เช่นกันเราจะเปลี่ยนค่า dProductPrice หรือราคาสินค้าตรงๆไม่ได้ ต้องผ่าน Method นี้เท่านั้น โดย Method นี้จะถูกเรียกอีกทีใน ShowNewPrice เพื่อตรวจสอบเงื่อนไขของส่วนลดอีกที |
ShowNewPrice | เราจะตรวจสอบว่าส่วนลดที่ได้มาเท่าไรก็หักออกไปจากราคาขายที่ตั้งใว้แต่แรก และแสดงผลให้ลูกค้าดู |
นำ Class ที่ได้ไปใช้งานจริง

จากตัวอย่างเราตั้ง meJone เป็น class ของ clsShopKeeper โดย
– ตั้งชื่อร้านเป็น Mr.Jone
– มีโปรโมชั่น Special Discount Today!! และตั้งราคาขายใว้ที่ 1000$
– จากนั้นให้ Mr.Jone ทักทายลูกค้า (Title() , sayHello())
– บอกราคาขายออกไป (ShowNewPrice())
– ลูกค้าขอลดไป 300 เราก็ตั้งราคาใหม่จากส่วนลด setDiscount(300)
– และบอกราคาขายใหม่ออกไป (ShowNewPrice() )
จะเห็นได้ว่าเราไม่สามารถแก้ไขราคาหรือส่วนลดได้ตรงๆเพราะทั้งคู่ถูกตั้งเป็น Private นั่นคือความหมายของ Encapsulation นั่นเอง เราจะนำเอาตัวแปรแบบ Private ไปห่อใว้ใน Method setPrice,setDiscount อีกทีเพื่อไม่ให้ถูกเรียกตรงๆได้จากภายนอก เป็นข้อดีที่เราจะซ่อนตัวแปรบางประเภทใว้ไม่ให้ object ภายนอกเข้าถึงได้ตรงๆนั่นเอง เอาไว้ทำให้เรามั่นใจในความปลอดภัยของค่าที่อยู่ในตัวแปรว่าจะต้องถูกต้องตามเงื่อนไขที่ต้องการเสียก่อน

ลองพยายามเรียก dProductPrice ตรงๆก็จะเกิด Error เพราะระบบจะตัวแปรหรือ Method ที่เป็น Private หาไม่เจอ

ผลของการทำงาน

ลองนำไปปรับใช้และฝึกฝนดูนะครับ
แนะนำติชมได้ตลอดนะครับ ที่ thaiswiftclass@gmail.com และทาง https://www.facebook.com/thaiswiftclass