12/08/2018, 13:43

Swift 3.0 - Một vài thay đổi đáng chú ý [Part 1]

Tại WWDC 2016, Apple đã giới thiệu đến giới lập trình viên iOS 10, cùng với đó là xCode beta 8 và ngôn ngữ Swift 3.0. Trong phiên bản Swift 3.0, Apple đã có những thay đổi khá lớn. Dù đến cuối năm nay iOS 10 và xCode 8 mới chính thức được Apple tung ra, và lúc đó Swift 3.0 mới chính thức được sử ...

Tại WWDC 2016, Apple đã giới thiệu đến giới lập trình viên iOS 10, cùng với đó là xCode beta 8 và ngôn ngữ Swift 3.0. Trong phiên bản Swift 3.0, Apple đã có những thay đổi khá lớn. Dù đến cuối năm nay iOS 10 và xCode 8 mới chính thức được Apple tung ra, và lúc đó Swift 3.0 mới chính thức được sử dụng, chúng ta hãy cùng điểm qua một vài điểm khác biệt của Swift 3.0 so với phiên bản trước đó (Swift 2.2) để tìm hiểu những thay đổi này, và chuẩn bị tinh thần update code của chúng ta khi iOS 10 chính thức ra mắt.

Về cơ bản, chúng ta có thể nhóm những thay đổi của Swift 3.0 thành 2 nhóm:

  • Xóa những features đã bị deprecated trong bản Swift 2.2
  • Thêm các tính năng mới để Swift 3.0 hiện đại hơn, thân thiện hơn và dễ sử dụng hơn với lập trình viên

Sau đây, trong bài viết này, chúng ta sẽ điểm qua một vài features đã bị loại bỏ trong Swift 3.0. Các features mới trong Swift 3.0, tôi sẽ viết trong bài tiếp theo của loại bài viết này.

Khi lập trình trên Swift 2.2, các bạn có thể một hay nhiều lần gặp phải warning trên các features này. xCode sẽ thông báo cho chúng ta rằng các features này đã bị deprecated và cảnh báo chúng ta rằng trên Swift 3.0, các features này sẽ không còn tồn tại, và sẽ gây ra lỗi.

a. Toán tử "++" và "--"

2 Toán tử này là các toán tử được sử dụng từ ngôn ngữ C, sử dụng như sau:

var number = 0
number++
++number
number--
--number

Việc sử dụng 2 toán tử này có thể làm bối rối lập trình viên, vì chúng ta có thể đặt toán tử đằng trước hoặc sau number. Vì vậy Apple đã quyết định bỏ 2 toán tử này. Chúng ta có thể viết lại như sau:

var number = 0
number += 1  // number = number + 1
number -= 1  // number = number - 1

b. Loại bỏ vòng lặp for C-Style

Nếu các bạn bắt đầu học lập trình với ngôn ngữ C, C++, Java,... thì hẳn các bạn đã quá quen thuộc với vòng lặp for được viết kiểu C-Style:

for(i = 1; i < 10; i++) {
    // code
}

Tuy nhiên, cách viết quen thuộc này đã bị deprecated trên Swift 2.2, và đã bị xóa bỏ hoàn toàn trên Swift 3.0. Hẳn là với các bạn đã quá quen thuộc với vòng lặp for C-Style (như mình chẳng hạn), việc loại bỏ cách viết kiểu cũ này khá là khó chịu. Các bạn có thể vào link này để tìm hiểu nguyên nhân cách viết vòng lặp for kiểu cũ này bị loại bỏ khỏi ngôn ngữ Swift

Với Swift 3.0, chúng ta có thể viết lại vòng lặp for bên trên như sau:

for i in 1..<10 {
    // code
}

Các bạn có thể tìm hiểu thêm về các cách viết vòng lặp for trên Swift 3.0 tại đây

c. Loại bỏ keyword "var" với các tham số của hàm

Trong Swift, khi chúng ta viết hàm, thì các tham số của hàm mặc định nhận kiểu let. Trước đây, để thay đổi việc này, chúng ta có thể gán keyword var vào tham số của hàm để tham số này nhận kiểu var. Ví dụ:

func testFunction(var a: Int, b: Int) {
    a = a + 1 // không có lỗi vì tham số a là kiểu var
    b = b + 1 // lỗi vì tham số b được mặc định kiểu let
    print(a)
}

Tuy nhiên, việc khai báo kiểu như trên đã không còn có thể sử dụng trên Swift 3.0. Bây giờ chúng ta sẽ không thể thay đổi keyword các tham số của hàm nữa. Chúng ta có thể viết lại hàm bên trên như sau:

func testFunction(a: Int, b: Int) {
    let c = a + 1
    let d = b + 1
    print(c)
}

Các bạn có thể đọc thêm tại đây để rõ hơn về nguyên nhân việc features này bị loại bỏ.

d. Đổi syntax: bắt buộc phải có tên tham số đầu tiên khi gọi hàm

ngay từ những phiên bản Swift đầu tiên cho đến hiện nay (Swift 2.2), chúng ta không phải viết tên của tham số đầu tiên khi gọi hàm, ví dụ:

testFunction(4, b: 10)

Như các bạn thấy, tham số "a" không cần phải viết vào khi chúng ta gọi hàm testFunction.

Tuy nhiên, trên Swift 3.0, để gọi hàm testFunction, chúng ta bắt buộc phải thêm tham số "a" vào, như sau:

testFunction(a: 4, b: 10)

Đây thật sự là một thay đổi khủng khiếp, khi Swift 3.0 chính thức được sử dụng, có lẽ chúng ta sẽ phải sửa rất nhiều trong dự án của mình. Chúng ta gọi hàm ở mọi nơi, vì thế chúng ta sẽ phải sửa ở tất cả mọi hàm có tham số, mọi file code trong dự án.

Nếu muốn sử dụng việc gọi hàm như các phiên bản Swift cũ, chúng ta có thể thêm ký tự "_" trước tham số đầu tiên của hàm. Ví dụ với hàm bên trên, chúng ta phải viết lại hàm như sau:

func testFunction(_ a: Int, b: Int) {
    let c = a + 1
    let d = b + 1
    print(c)
}

Để tìm hiểu thêm về nguyên nhân của thay đổi này trong Swift, các bạn có thể tham khảo tại đây

e. Không được sử dụng String cho các Selector

Giả sử, chúng ta có code sau:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        NSNotificationCenter.defaultCenter().addObserver(self, selector:
            "applicationWillResignActive", name: "applicationWillResignActive", object: nil)
    }

    func applicationWillResignActive() {
        print("applicationWillResignActive")
    }

    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
}

Trong đoạn code bên trên, Selector của chúng ta được viết dưới dạng String: "applicationWillResignActive". Việc viết Selector bằng String kiểu này rất dễ sảy ra lỗi khi lập trình viên viết nhầm chuỗi String này. Chính vì vậy, việc viết Selector kiểu này đã bị loại bỏ trong bản Swift 3.0. Để gọi Selector trên Swift 3.0, chúng ta viết như sau:

override func viewDidLoad() {
    super.viewDidLoad()

    NSNotificationCenter.defaultCenter().addObserver(self, selector:
        #selector(ViewController.applicationWillResignActive), name: "applicationWillResignActive", object: nil)
}

Ở đây, ViewController là class và applicationWillResignActive là hàm của class. Viết kiểu này sẽ không sảy ra lỗi do viết nhầm tên hàm. Các bạn có thể tham khảo thêm nguyên nhân việc loại bỏ features này tại đây

Trên đây là một số features đã bị loại bỏ trên Swift 3.0, sau đây, tôi xin giới thiệu một số tính năng mới trên Swift 3.0

Trên đây, tôi đã giới thiệu đến các bạn một vài features đã bị loại bỏ trên Swift 3.0 và các phương pháp thay thế cho các features đó. Trong bài viết sau, tôi sẽ giới thiệu đến các bạn một vài features hữu ích mới được thêm vào Swift 3.0.

Hi vọng bài viết này có thể giúp ích cho các bạn chuẩn bị tinh thần cho đợt update code sắp tới; đợt update code hứa hẹn sẽ gặp rất nhiều vất vả bởi nhiều thay đổi lớn trên Swift 3.0. Cảm ơn các bạn đã theo dõi bài viết này!

Để tìm hiểu thêm về chủ đề này, các bạn có thể tham khảo tại các link sau:

https://developer.apple.com/videos/play/wwdc2016/402/

http://www.appcoda.com/swift3-changes/

https://www.raywenderlich.com/135655/whats-new-swift-3

0