Swift 1.2 โดยสังเขป
เมื่อคืนนี้ (คงจะเช้าของที่ CA) Apple ได้ออก Xcode 6.3 Beta with iOS SDK 8.3 และ iOS 8.3 Beta ยังไม่อัพหรอก แต่ที่น่าตื่นตาตื่นใจ ก็คือการอัพเดท Swift Language เป็นเวอร์ชั่น 1.2 นี่แหละ สิ่งที่เพิ่มเข้ามาและเปลี่ยนแปลงก็ทำให้ดูดีขึ้นเลยทีเดียว ก็ประมาณนี้ที่จะเขียนล่ะนะ
- ต่อไปเวลา 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 ซ้ำก็เช่นกัน
- เราสามารถนำเข้าบางส่วนของ Library ที่เกี่ยวกับภาษา C เช่น unions, bitfield, SIMD และอื่นๆ ได้ แต่ไม่ใช่การใช้ใน Swift ตรงๆ โดยจะเป็นการใช้ผ่าน C, Objective-C API มากกว่า
- เมื่อ import Struct บน C เข้ามาใน Swift แล้ว default initializer ของ Struct นั้นจะถูกสร้างโดยอัติโนมัติ
- รูปแบบใหม่ของการพิมพ์ชนิดตัวแปรผ่าน 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 ที่ถูกประกาศโดยอัตโนมัติแบบนี้
หรือแบบนี้
Comments
Post a Comment