Swift 1.2 โดยสังเขป


เมื่อคืนนี้ (คงจะเช้าของที่ CA) Apple ได้ออก Xcode 6.3 Beta with iOS SDK 8.3 และ iOS 8.3 Beta ยังไม่อัพหรอก แต่ที่น่าตื่นตาตื่นใจ ก็คือการอัพเดท Swift Language เป็นเวอร์ชั่น 1.2 นี่แหละ สิ่งที่เพิ่มเข้ามาและเปลี่ยนแปลงก็ทำให้ดูดีขึ้นเลยทีเดียว ก็ประมาณนี้ที่จะเขียนล่ะนะ

- สามารถเปลี่ยนโค้ดจาก Swift 1.1 ไป 1.2 ได้โดยเมนู Edit > Convert > To Swift 1.2 บน Xcode 6.3 Beta

- ต่อไปเวลา Build (Compile) Swift Code จะสนใจแค่ไฟล์ที่เปลี่ยนเท่านั้น ไม่ใช่การ Build ทุกไฟล์เหมือนเมื่อก่อน
- เพิ่ม Set เข้ามา ซึ่งเป็น Collection Type ใหม่ ที่มีคุณสมบัติเก็บค่าที่ไม่ซ้ำ และมีคุณสมบัติตามเซตในคณิตศาสตร์

- สามารถตรวจสอบโดยใช้ keyword `if let` ได้ทีละหลายกรณี ซึ่งวิธีนี้จะหลีกเลี่ยง Pyramid of Doom ได้อย่างดีเลย ลองดูตัวอย่างโค้ด


- ไม่จำเป็นต้องกำหนดค่าเริ่มต้นให้ Constant ในทันทีที่ประกาศ แต่จะต้องกำหนดค่าก่อนใช้งาน ดังนั้นจะทำให้เกิดโค้ดรูปแบบนี้ได้ด้วย (มี Bug บน Playground นะ ผมลองละ)


- สามารถใช้ static บน class ได้ (คุณสมบัติเหมือน class final) ซึ่งมีความหมายว่าเป็น class property หรือ method ที่ไม่มีสามารถ override ได้
- Enum บน Swift สามารถที่จะแปลงค่าตัวเองได้ เมื่อถูก import ไปใช้บน Objective-C แล้วนะ โดยใช้ @objc attribute (แต่น่าจะได้เฉพาะ Integer แหละเนื่องมาจากความโง่ของ C Enum)
- ในภาษา Objective-C ตอนนี้รองรับ Pointer Nullability (ความหมายคล้าย Optional ใน Swift นั่นแหละ) ทำให้เราสามารถ import Objective-C library ไปบน Swift โดยไม่ต้องใส่เครื่องหมาย ! เมื่อถูกเรียกใช้ผ่าน Swift หรือที่เรียกว่า Implicitly Unwrapped Optional อีกต่อไป (ดูเพิ่มเติมในส่วนของ Objective-C)
- เราสามารถนำเข้าบางส่วนของ Library ที่เกี่ยวกับภาษา C เช่น unions, bitfield, SIMD และอื่นๆ ได้ แต่ไม่ใช่การใช้ใน Swift ตรงๆ โดยจะเป็นการใช้ผ่าน C, Objective-C API มากกว่า
- เมื่อ import Struct บน C เข้ามาใน Swift แล้ว default initializer ของ Struct นั้นจะถูกสร้างโดยอัติโนมัติ


- มี API ใหม่สำหรับการเปลี่ยนแปลงชนิดของ Index สำหรับ String, String.UnicodeScalarView, String.UTF16View และ String.UTF8View
- รูปแบบใหม่ของการพิมพ์ชนิดตัวแปรผ่าน println หรือ string interpolation


- ไม่มีการเปลี่ยนแปลง Objective-C class (NSString, NSArray, NSDictionary) ไปเป็น Swift value type (String, Array, Dictionary) ให้เองอีกต่อไป


จะต้องทำการ cast เองด้วย `as` keyword


แต่ในทางกลับกัน การเปลี่ยนจาก Swift value type ไปเป็น Objective-C class ยังคงใช้งานได้ปกติ


@autoclosure attribute จะถูกเขียนเป็น `keyword` หน้าชื่อของ closure ไม่เหมือนก่อนหน้านี้ที่เขียนเอาไว้หน้า closure declearation


- การทำ curry function สามารถที่จะใส่ label สำหรับ parameter แต่ละตัวได้แล้ว


- Swift จะมาสามารถตรวจสอบ conflict ของการ overload และ overriding ได้ เช่นการซำ้กันของชื่อ method ที่ถูกประกาศโดยอัตโนมัติแบบนี้


หรือแบบนี้


และการประกาศ protocol ซ้ำก็เช่นกัน


Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android