Swift 5 Có gì mới ?

Tram Ho

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!

.u99a16a9b2080fe9506bff7655cc88f5d { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u99a16a9b2080fe9506bff7655cc88f5d:active, .u99a16a9b2080fe9506bff7655cc88f5d:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u99a16a9b2080fe9506bff7655cc88f5d { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u99a16a9b2080fe9506bff7655cc88f5d .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u99a16a9b2080fe9506bff7655cc88f5d .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u99a16a9b2080fe9506bff7655cc88f5d:hover .postTitle { text-decoration: underline!important; }

  TIOBE Index tháng 10- Swift mất dần vị thế

.u688686896de0edaa7794c4b8310accc4 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u688686896de0edaa7794c4b8310accc4:active, .u688686896de0edaa7794c4b8310accc4:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u688686896de0edaa7794c4b8310accc4 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u688686896de0edaa7794c4b8310accc4 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u688686896de0edaa7794c4b8310accc4 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u688686896de0edaa7794c4b8310accc4:hover .postTitle { text-decoration: underline!important; }

  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

.u5ce9554dae846901c11c7dc2cc9a80c9 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u5ce9554dae846901c11c7dc2cc9a80c9:active, .u5ce9554dae846901c11c7dc2cc9a80c9:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u5ce9554dae846901c11c7dc2cc9a80c9 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u5ce9554dae846901c11c7dc2cc9a80c9 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u5ce9554dae846901c11c7dc2cc9a80c9 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u5ce9554dae846901c11c7dc2cc9a80c9:hover .postTitle { text-decoration: underline!important; }

  Swift 5 Có gì mới ?

Swift chen chân vào top 10, Java vẫn giữ vững ngôi vương””]

.uba57021f7529f091eb456c4066e09c2f { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .uba57021f7529f091eb456c4066e09c2f:active, .uba57021f7529f091eb456c4066e09c2f:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .uba57021f7529f091eb456c4066e09c2f { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .uba57021f7529f091eb456c4066e09c2f .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .uba57021f7529f091eb456c4066e09c2f .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .uba57021f7529f091eb456c4066e09c2f:hover .postTitle { text-decoration: underline!important; }

  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”]

) {$ 0 [$ 1.key] = Int ($ 1.value)} // ["Oana": "10"]

Swift 5 uses compactMapValues(_:) to solve this problem ( see details here ):

7. Renaming Dictionary Literals

Swift 4.2 uses DictionaryLiteral to declare for a dictionary:

Note : DictionaryLiteral is not a dictionary or a literal. It is a list of key-value pairs.

Swift 5 renamed DictionaryLiteral to KeyValuePairs: let pets: KeyValuePairs = ["dog": "Sclip", "cat": "Peti"]

8. Handling Future Enumeration Cases

Swift 4.2:

In swift 5 will add the value markings that are default so that in the future you can replace the default values ​​of enum to specific values ​​by warning the warning of Xcode:

In code this, you mark default as @unknown , and Swift warns you are not exhaustive. default handles .screencast, .course and .podcast because of the screencasts, courses and podcasts are blog posts. In the above code, you mark @unknown , and swift will warn that: Switch must be exhaustive. Xcode will implement all of Enum's enumeration cases .

9. Adding Result to the Standard Library

Swift 5 adds Result to the standard library :

  • The Result type handle results in asynchronous function using enum with 2 cases: success and failure. To understand how I will give an example to handle the result returned when calling the API:

From the above code to handle the returned result we need to use guard if let to check response status code, return data, and decode the data to model. How to handle the bar slightly bulky, complex. OK! Now how do you try to use the type Result in swift 5 to see it:

This way of looking at the code is quite clear and easy to understand, right.

10. Platform Deployment Settings

Swift 5 allows you to define the minimum number of platforms in Package.swift

You can use macOS (), iOS (), tvOS () and watchOS () in SupportedPlatform to set the minimum platform in Package.swift.

11. Flattening Nested Optionals

Swift 4.2 creates nested optionals with try? as follows:

However, when uploading to swift 5 is nested optionals with try?

try? in swift 5 will not create nested optionals, you just need to unwrap division once only when it is Int?

12. Build Configuration Updates

Swift 4.2 uses> = in compilation conditions:

Swift 5 support adds <in compilation conditions:

References

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

.u5ce9554dae846901c11c7dc2cc9a80c9 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .u5ce9554dae846901c11c7dc2cc9a80c9:active, .u5ce9554dae846901c11c7dc2cc9a80c9:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u5ce9554dae846901c11c7dc2cc9a80c9 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u5ce9554dae846901c11c7dc2cc9a80c9 .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .u5ce9554dae846901c11c7dc2cc9a80c9 .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .u5ce9554dae846901c11c7dc2cc9a80c9:hover .postTitle { text-decoration: underline!important; }

Swift 5 What's new?

Swift stepped into the top 10, Java still held the throne. "]]

.uba57021f7529f091eb456c4066e09c2f { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid #34495E!important; text-decoration:none; } .uba57021f7529f091eb456c4066e09c2f:active, .uba57021f7529f091eb456c4066e09c2f:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .uba57021f7529f091eb456c4066e09c2f { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .uba57021f7529f091eb456c4066e09c2f .ctaText { font-weight:bold; color:inherit; text-decoration:none; font-size: 16px; } .uba57021f7529f091eb456c4066e09c2f .postTitle { color:#000000; text-decoration: underline!important; font-size: 16px; } .uba57021f7529f091eb456c4066e09c2f:hover .postTitle { text-decoration: underline!important; }

Swift 5 What's new?

Apple has a Swift programming language, Google now has a "first-class" programming language for Android "]

Chia sẻ bài viết ngay

Nguồn bài viết : viblo