Swift 5 Có gì mới ?

1294

Swift 5 đã phát hành ngày 25/3/2019, có nhiều cái tính năng mới như là Escaping Raw Strings, handling future enumeration, result type… Hôm nay mình xin giới thiệu cho các bạn đọc 1 số tính năng mới của swift 5 so với swift 4.2 .Ok, cùng tìm hiểu nào!

  TIOBE Index tháng 10- Swift mất dần vị thế
  Làm việc với Model và Dictionary trong ObjC và Swift (phần 1)

1. Kiểm tra bội số nguyên

Ví dụ : Để chia a cho số b Trong swift 4.2 bạn phải kiểm tra số b có khác 0 hay không như sau:

Trong swift 5: bạn chỉ cần dùng hàm isMultiple(of:) để check xem số a có là bội của số b hay không?

2. Escaping Raw Strings

Trong Swift 4.2 thì Escape sequences đang sử dụng backslashes (\) và quote marks(“) trong strings.

Swift 5 bạn có thể thêm dấu # ở vị trí bắt đầu và vị trí kết thúc của chuỗi string khi bạn dùng backslashes và quote marks

When using string interpolation in raw strings, you have to use a pound sign after the backslash: Khi dùng string interpolation trong raw string VD: "raw string \(a)", bạn có thể dùng dấu # sau dấu \

Note: Bạn có thể dùng nhiều dấu # trước dấu ” hoặc sau dấu \ mà không có vấn đề gì:

In Swift 4.2, you escape backslashes inside regular expressions as follows: Trong swift 4.2 , bạn escape backslashes (\) trong biểu thức chính quy:

Trong swift 5 bạn chỉ cần viết 1 nửa dấu gạch chéo \ bằng cách thay bằng dấu #

3. Dùng character property mới

Trong swift 4.2 để bạn convert 1 chracter từ String sang Int bạn làm như sau:

Tuy nhiên, Swift 5 thêm thuộc tính isNumber để kiểm tra 1 character có phải số Int.

Bạn có thể vào đây để xem các thuộc tính mới character.

4. Dùng Unicode Scalar Properties mới

Trong swift 4.2, bạn có thể kiểm tra 1 kí tự ví dụ kí tự ‘a’ không phải là số hay không theo cách sau:

Swift 5, có thêm thuộc tính mới giúp xử lý đơn giản hơn bằng cách dùng thuộc tính isAlphabetic :

5. Xoá Subsequences

Trong swift 4.2, Subsequences sẽ được trả về khi Custom Sequences.

Swift 5, đã thay thế Subsequences thành concrete types (loại cụ thể) :

6. Compacting Dictionaries

Swift 4.2, dùng mapValues, filter và reduce để lọc các giá trị = nil từ dictionary như sau:

Swift 5 dùng compactMapValues(_:) để giải quyết vấn đề trên (xem chi tiết tại đây):

7. Renaming Dictionary Literals

Swift 4.2 dùng DictionaryLiteral để khai báo cho 1 từ điển:

Note: DictionaryLiteral không phải là một dictionary hoặc 1 literal. Nó là 1 list các cặp key-value.

Swift 5 đã đổi tên DictionaryLiteral thành KeyValuePairs: let pets: KeyValuePairs = [“dog”: “Sclip”, “cat”: “Peti”]

8. Handling Future Enumeration Cases

swift 4.2:

Trong swift 5 sẽ bổ sung đánh dấu các giá trị đang để mặc định để trong tương lai bạn có thể thay các giá trị đang là default của enum thành các giá trị cụ thể bằng cách báo warning của Xcode:

In this code, you mark default as @unknown, and Swift warns you that switch isn’t exhaustive. default handles .screencast, .course and .podcast because screencasts, courses and podcasts are blog posts. Trong đoạn code trên, bạn đánh dấu @unknown, và swift sẽ báo warning rằng : Switch must be exhaustive. Xcode sẽ implement tất cả các enumeration cases của Enum.

9. Adding Result to the Standard Library

Swift 5 thêm Result vào standard library:

  • Kiểu Result type handle kết quả của asynchronous function dùng enum với 2 case: success and failure. Để hiểu nó như thế nào mình sẽ đưa ra 1 ví dụ xử lý kết quả trả về khi gọi API:

Từ đoạn code trên để xử lý kết quả trả về chúng ta cần dùng if let hoắc guard để check response status code, data trả về , and decode the data ra thành model. Cách xử lý thanh hơi cồng kềnh, phức tạp. OK! bây giờ các bạn thử dùng type Result trong swift 5 xem nó như thế nào nhé:

Cách này nhìn code khá là clear và dễ hiểu phải không nào.

10. Platform Deployment Settings

Swift 5 cho phép bạn định nghĩa số các platform tối thiểu trong Package.swift

Bạn có thể dùng macOS(), iOS(), tvOS() và watchOS() trong SupportedPlatform để set flatform tối thiểu trong Package.swift.

11. Flattening Nested Optionals

Swift 4.2 tạo nested optionals with try? như sau:

Tuy nhiên khi lên swift 5 thì nested optionals with try?

try? trong swift 5 sẽ không tạo nested optionals , bạn chỉ cần unwrap division 1 lần duy nhất khi nó đang là kiểu Int?

12. Build Configuration Updates

Swift 4.2 dùng >= trong compilation conditions:

Swift 5 support thêm dấu < trong compilation conditions:

Tài Liệu Tham Khảo

https://www.raywenderlich.com/55728-what-s-new-in-swift-5https://medium.com/@azamsharp/understanding-result-type-in-swift-5-387d5ef9f45e

Techtalk via viblo

  Swift 5 Có gì mới ?
Swift chen chân vào top 10, Java vẫn giữ vững ngôi vương””]

  Swift 5 Có gì mới ?
Apple có ngôn ngữ lập trình Swift thì giờ đây Google cũng có ngôn ngữ lập trình “hạng nhất” cho Android”]

CHIA SẺ