รู้จักกับ Class และ Structure
วิธีการประกาศ Class
การประกาศใช้ Class นั้นจะใช้ keyword “class” ตามด้วยชื่อของคลาสที่ต้องการประกาศ และรายละเอียดของคลาสจะอยู่ภายในเครื่องหมาย {}
วิธีการประกาศ Structure
การประกาศใช้ Structure นั้นจะใช้ keyword “struct” ตามด้วยชื่อของ Structure ที่ต้องการประกาศ และรายละเอียดของ structure จะอยู่ภายในเครื่องหมาย {}
ตัวอย่างการใช้งาน Class และ Structure
struct GeoLocation{
var lat = 88.25
var long = 91.5
}
struct Size{
var width = 1280
var height = 960
}
class SharedImage{
var location = GeoLocation()
var size = Size()
var type = "png"
var name = ""
}
จากตัวอย่างข้างต้น
- structure Geolocation เป็นชนิดข้อมูลที่ทำการเก็บตำแหน่งของรูปภาพโดยมีคุณลักษณะของข้อมูล 2 อย่างด้วยกันคือค่า latitude และ longitude
- structure Size เป็นชนิดข้อมูลที่ทำการเก็บขนาดของรูปภาพโดยมีคุณลักษณะของข้อมูล 2 อย่างด้วยกันคือ width และ height
- class SharedImage เป็นชนิดข้อมูลที่ทำการเก็บรายละเอียดของรูปภาพที่ทำการแชร์ไว้โดยจะมีคุณลักษณะของข้อมูล 4 อย่างด้วยกัน คือ ข้อมูลตำแหน่งของรูปภาพ, ขนาดของรูปภาพ, ชนิดของรูปภาพ และ ชื่อของรูปภาพ
วิธีการสร้าง instance เพื่อนำไปใช้งานจริง ของ Structure และ Class
var geoLoc = GeoLocation() var image = SharedImage()
วิธีการเข้าถึงคุณลักษณะของข้อมูลแต่ละตัว
การเข้าถึงคุณลักษณะของข้อมูลเราสามารถใช้เครื่องหมาย “.” และตามด้วยคุณลักษณะข้อมูลนั้นๆ
print("Image location is: (\(image.location.lat), \(image.location.long) )") // result: Image location is: (88.25, 91.5 )
print("Image type is \(image.type)") // result: Image type is png
Structure นั้นเป็นการเก็บข้อมูลแบบ value type
การเก็บข้อมูลแบบ value-type คือ ทุกครั้งที่มีการกำหนดค่า structure ให้กับ ค่าคงที่, ตัวแปร หรือฟังก์ชันต่างๆ ข้อมูลเหล่านั้นจะถูกคัดลอกไปใช้และจะอิสระจากข้อมูลเดิม ใน swift นั้น integers, floating-point numbers, Booleans, strings, arrays and dictionaries นั้นต่างถูกสร้างมาจาก structure และเป็นประเภท value type ส่วน enumeration ก็เป็นประเภท value type เช่นกัน
var newSize = image.size
newSize.width = 640
newSize.height = 480
print("Original Size(\(image.size.width),\(image.size.height)) to new Size(\(newSize.width), \(newSize.height))")
ผลก็คือ
Original Size(1280,960) to new Size(640, 480)
จากตัวอย่าง เรามีการคัดลอกขนาดของรูปภาพเพื่อจะทำการกำหนดขนาดใหม่ มาใส่ไว้ในตัวแปรใหม่ชื่อว่า newSize หลังจากนั้นเราจึงทำการกำหนดค่าให้ตัวแปรใหม่นี้ทั้งความกว้าง และ ความยาว และเนื่องจากหลังจากเราทำการคัดลอกข้อมูลมาแล้ว ข้อมูลเก่าและข้อมูลใหม่จะเป็นอิสระจากกัน เมื่อเราพิมพ์ค่าออกมา จะทำให้ newSize และ imageSize มีขนาดไม่เท่ากัน
Class นั้นเป็นการเก็บข้อมูลประเภท reference type
ต่างจาก structure สำหรับ class นั้นเวลามีการคัดลอกข้อมูลไปยังตัวแปรใหม่จะมีการชี้กลับไปยัง instance ตัวเดิมไม่มีการสร้างข้อมูลใหม่
var newImage = image
newImage.type = "jpg"
print("Original image type: \(image.type)")
ผลก็คือ
Original image type: jpg
จากตัวอย่าง เรามีการสร้างตัวแปรใหม่ชื่อ newImage เพื่อจะมารับ instance image แต่เมื่อมีการเปลี่ยนแปลข้อมูลชนิดของรูปภาพในตัวแปรใหม่คือ newImage ข้อมูลชนิดของรูปภาพในตัวแปรเก่าคือ image จะถูกเปลี่ยนแปลงไปด้วย
การเปรียบเทียบข้อมูล Class
การเปรียบเทียบข้อมูลของ Class ว่าเป็นข้อมูลจาก instance เดียวกันหรือไม่เราใช้เครื่องหมาย === หรือ !== ในการเปรียบเทียบ
if(image === newImage){
print("Same instance")
}
ผลก็คือ
Same instance
อ่านเพิ่มเติม ที่นี่
วันต่อไป Properties

