iOS Tutorial – Begin with swift ( day 7 ) – Class และ Structure

รู้จักกับ Class และ Structure

วิธีการประกาศ Class

class

 

 

 

 

การประกาศใช้ Class นั้นจะใช้ keyword “class” ตามด้วยชื่อของคลาสที่ต้องการประกาศ และรายละเอียดของคลาสจะอยู่ภายในเครื่องหมาย {}

วิธีการประกาศ Structure

struct

 

 

 

การประกาศใช้ 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