[WWDC20] Swift มีอะไรใหม่ที่น่าสนใจบ้าง? (Part2)

Suchai Fooanant
CREATIVE ME
Published in
3 min readJul 2, 2020

จาก Part ที่แล้วที่เราคุยกัน ถึงอัพเดทว่ามีอะไรใหม่ๆ บ้าง (Part 1 ดูที่นี่) ใน Swift ซึ่งส่วนมากจะเป็นของตัว Perfomance ซะส่วนมาก

มารอบนี้ เราจัดกันต่อ กับการเขียนโปรแกรมกันซะที Developer จะได้อ่านแล้วเพลินกันมากขึ้นเนอะ 🥰

Language & Libraries

มีการอัพเดททั้งตัวภาษาเองและ Libraries ที่มาใช้งานเพิ่ม เพียบ ซึ่งแต่ละตัว เด็ดๆทั้งนั้น

รายชื่อ Feature ที่อัพเดทเข้ามาใน Swift 5.3

Multiple trailing closure syntax

สามารถใช้ trailing closure ได้หลาย parameter แล้ว ! ยกตัวอย่างที่ทุกคนต้องเจอกันบ่อยๆ คือ UIView.animate(withDuration:animations:completion)

KeyPath expressions as functions

เราสามารถส่ง KeyPath ไปโดยมี signature เป็น function ได้แล้ว ช่วยให้เราเขียนโค้ดได้ reusable มากขึ้น รวมถึง readability ที่อ่านง่ายขึ้นอีกด้วย ขอยกตัวอย่างจาก ใน WWDC20 เลยนะ เข้าใจได้ง่ายดีด้วย

สร้าง Entry Point ของโปรแกรมด้วย @main

สามารถเลือกได้แล้วว่า จะให้ class ไหนเป็น Entry Point เมื่อเราเริ่มโปรแกรม
ถ้าเป็นแต่ก่อนก็ต้องใช้ @UIApplicationMain สำหรับ UIKit แต่หลังจากนี้ไป ใช้ @main แทนได้เลย ซึ่งก็ง่ายขึ้นพอสมควร

Increased availability of implicit self in closures

ใน closure ไม่จำเป็นต้องใส่ self เพื่อเรียก refer ไปหา object แล้ว! เลิฟ อันนี้มากๆ

แต่ก็มีอยู่สองกรณีนะ ถ้าเป็น Class หรือ reference type เราจะต้อง capture self ไว้ แต่ถ้าเป็น Struct เราไม่จำเป็นต้องมีก็ได้ เช่น

Multi-pattern catch clauses

catch error สามารถเลือก catch ได้หลาย type แล้ว เผื่ออารมณ์หลายๆ Error เราอยาก Handle ไปในทางเดียวกัน 🌟

Synthesized Comparable conformance for enum

เมื่อ enum conform Comparable ไม่จำเป็นต้อง implement ตัว Comparable แล้วสำหรับ enum แล้ว ถ้าเราต้องการจะ compare ค่าของ enum พวก เท่ากับ, มากกว่า, น้อยกว่า​​โดยเรียงจากลำดับของ case ที่เราประกาศ ง่ายชะมัด

Enum cases as protocol witnessses

ตัวนี้จริงๆ ที่มันทำ คือ ทำให้ Enum สามารถ matching กับ protocol witness ได้
ซึ่งเวอร์ชั่นเก่าๆ ตัว Enum เองไม่สามารถทำได้

ส่วนใครอยากรู้ว่า protocol witness คืออะไร ลองดูจาก
https://www.youtube.com/watch?v=3BVkbWXcFS4 หรือ https://forums.swift.org/t/protocol-witness-matching-mini-manifesto/32752 ดูเพิ่มเติมนะ

Float16

เพิ่ม Type ใหม่ ที่ confirm เข้ากับ BinaryFloatingPoint กับ SIMDScalar เจ้าตัวนี้จะใช้บ่อยกับการคำนวนโดยใช้ GPU เป็นหลัก

ปรับการทำงานของ didSet

มีการเพิ่มประสิทธิภาพในการทำงานของ didSet เพิ่มขึ้น โดยที่เราไม่ต้องแก้ไขโค้ดเพิ่มเลย

จากเดิมไม่ว่ายังไง didSet ก็จะมีการเรียกใช้ getter เพื่อให้มี oldValue (ค่าก่อนหน้า) มาใช้งานเสมอ แม้เราจะไม่ได้มีการเรียกใช้งาน oldValue เลยก็ตาม

การปรับครั้งนี้ สั้นๆง่ายๆคือ ถ้าเราไม่มีการเรียกใช้ oldValue และ ไม่มีการใช้ willSet คู่ด้วย ตัว Swift จะข้ามการเรียกใช้ getter ของ oldValue ไปให้เลยทันที

where clauses on contextually generic declarations

เพิ่มความสามารถให้สามารถ where บน method ด้วยการใช้ generic ได้
ยกตัวอย่างเช่น

ถ้าเป็น Swift ที่ต่ำกว่า 5.3 จะ compile error แต่ตอนนี้สามารถใช้งานได้แล้ว!

ช่วยให้เวลาเราเขียน extension หรืออื่นๆ เราไม่จำเป็นต้องแยก extension เป็นหลายๆส่วน แต่เขียนรวมด้วยกันในที่เดียว แล้วแยกด้วย where clause แทนได้เลย :)

--

--