Posts

Showing posts with the label struct

Value and Reference Types in Swift

Image
ประเภทของ Instance (of Custom Type) ใน Swift แบ่งออกเป็น 2 ประเภทคือ Value Type หมายถึง instance นั้นจะจัดการ data ของตัวเอง ไม่มีใครมาเปลี่ยนแปลง data ของตัวเองได้ ซึ่งใน Swift ข้อมูลที่เป็น Value Type ก็เช่น struct , enum และ tuple Reference Type จะหมายถึงในทางกลับกันคือ data ที่อยู่ใน instance จะทำการแชร์กับตัวแปรอื่นๆ ที่ถูก reference ไปด้วยซึ่งถ้าสร้าง Custom Type ด้วย class จะเป็น Reference Type ใน Blog นี้เราจะมาว่ากันถึงข้อดีของทั้งสองแบบ และการเลือกว่าจะใช้อันไหนดี What's the Difference ? สิ่งที่แตกต่างกันอย่างชัดเจนของ Value type นั่นคือการ copy ซึ่งจะเห็นผลในเรื่องของ ผลกระทบของการกำหนดค่า, การกำหนดค่าเริ่มต้น และการส่งผ่าน arguments มาลองดูตัวอย่างการสร้าง instance ที่เป็น Value type กัน ในทางกลับกัน Reference Type จะเป็นการสร้าง instance แบบแชร์ข้อมูลกัน โดยหลังจากที่มีการกำหนดค่าเกิดขึ้น instance ทั้งสองตัวจะอ้างอิงไปหาข้อมูลตัวเดียวกัน และสามารถเปลี่ยนค่าของกันและกันได้ เช่น ถ้าเราเปลี่ยนแปลงในตัวแปรตัวที่สอง ตัวแรกจะมีผลกระทบด้วย ...

Intermediate Swift

Image
จากที่เขียนเรื่อง Basic ไปเมื่อคราวที่แล้ว ( http://www.macbaszii.com/2014/06/introduction-to-swift.html ) คราวนี้มาเรื่องที่ยากขึ้นหน่อยแล้วกันเนอะ โดยบาง Feature ของภาษา Swift บางอย่างก็จะมีอยู่แล้วใน Objective-C แต่ทำให้ดูน่ารัก น่าใช้ขึ้นอีกหน่อย Optionals เคยไหม ? ฟังก์ชั่นสักตัวที่ให้ค่ากลับมาเป็นผลลัพธ์ หรือบางทีก็ไม่ (nothing value) เรามักจะแยกประเภทเวลาที่ฟังก์ชั่นส่งค่าที่สื่อถึงการไม่มีค่ากลับมา เช่นถ้าเป็น NSRange ก็จะส่ง NSNotFound กลับมา อะไรที่เกี่ยวกับ Index เช่นการหาข้อมูลบางอย่างใน Array ก็จะส่ง -1 หรือไม่ท่าพื้นฐานก็ส่ง nil กลับมาเลย ทำให้ต้องไปดู Protocol ของฟังก์ชั่นที่ใช้ แล้วเช็คเงื่อนไขให้ถูกต้องนั่นแหละ แต่ใน Swift มีแนวคิดของการใช้ Optionals ตอนนี้เรามี " nothing value หรือปล่าว ?" ให้ใช้กันแล้ว เพียงแค่เติม ? ต่อท้ายไปเท่านั้นเอง มาดูตัวอย่างโค้ดนี้กัน จากตัวอย่าง Property Car ใน Person Class เป็น Optional นั่นหมายความ "คนอาจจะมี หรือไม่มีรถก็ได้" โดยเราจะไม่สามารถเข้าถึง Property ที่เป็น Optional ได้โดยตรงจะต้องทำสิ่งที่เ...