Swift Class vs Struct ต่างกันยังไง?

Ton Attapong
Seekster Development
1 min readAug 28, 2019

class vs struct ต่างกันยังไง? Reference type คือ? Value type คือ?

Class

Class เป็น Reference type

Struct

Struct เป็น Value type

เมื่อรู้แล้วว่า Class เป็น Reference type และ Struct เป็น Value type แล้ว Reference type กับ Value type คืออะไร ต่างกันยังไง? เดี๋ยวผมจะยกตัวอย่างให้ดูนะครับ เราไปดูกันเลย !!

Example: Reference type

เรามีเบอร์เพื่อนที่บันทึกไว้ในโทรศัพท์ของเรา วันนึงเพื่อนเราโทรมาบอก เห้ยเอ็ง ข้าเปลี่ยนเบอร์แล้วนะ สิ่งที่เราทำแบบ Reference type คือ

  • เราก็หยิบโทรศัพท์ขึ้นมาแล้วหาชื่อเพื่อนที่บันทึกไว้
  • ลบเบอร์เก่าเพื่อนออกแล้วใส่เบอร์ใหม่เข้าไปแทน

เราลองมาดู Code กันบ้าง

class Contact {
var phoneNumber: String?
}
var day1 = Contact()
day1.phoneNumber = "099-999-9999"
var day30 = day1
day30.phoneNumber = "088-888-8888"
print(day1.phoneNumber)
print(day30.phoneNumber)
// ผลลัพท์ที่ได้
// 088-888-8888
// 088-888-8888

จาก Code ด้านบนจะเห็นว่า เบอร์เก่าหายไปเป็นที่เรียบร้อยแล้วววววว !!! ถ้าเพื่อนมันโทรมาบอกว่า เห้ยเอ็ง ข้ากลับมาใช้เบอร์เก่าแล้วนะ เราคงต้องถามเพื่อนอีกว่าเบอร์เก่าเอ็งเบอร์อะไรนะเพื่อน

Example: Value type

เรามีเบอร์เพื่อนที่บันทึกไว้ในโทรศัพท์ของเรา วันนึงเพื่อนเราโทรมาบอก เห้ยเอ็ง ข้าเปลี่ยนเบอร์แล้วนะ สิ่งที่เราทำแบบ Value type คือ

  • เราก็หยิบโทรศัพท์ขึ้นมาแล้วหาชื่อเพื่อนที่บันทึกไว้
  • เพิ่มเบอร์ใหม่เข้าไปอีกเบอร์โดยที่เบอร์เก่ายังอยู่

เรามาดู Code กันบ้าง

struct Contact {
var phoneNumber: String
}
var day1 = Contact(phoneNumber: "099-999-9999")var day30 = day1
day30.phoneNumber = "088-888-8888"
print(day1.phoneNumber)
print(day30.phoneNumber)
// ผลลัพท์ที่ได้
// 099-999-9999
// 088-888-8888

จาก Code ด้านบนจะเห็นว่า เบอร์เก่ายังอยู่วววววววว !!! ถ้าเพื่อนมันโทรมาบอกว่า เห้ยเอ็ง ข้ากลับมาใช้เบอร์เก่าแล้วนะ เราคงตอบกลับไปว่า เออโอเคร !

สรุป

  • Class เอาแต่ของใหม่เอ๊าะๆ
  • Struct เหมาหมด

จบแล้วนะครับใครหายงงแล้วยกมือออออ ! หวังว่าจะมีประโยชน์กับทุกคนนะครับ หากมีข้อผิดพลาดประการใด ผมต้องขออภัยด้วยนะครับ

--

--