Tìm hiểu các loại keyword trong Swift:

- Keyword khai báo

- Keyword trong statements

- Loại keyword với biểu thức

- Keyword sử dụng #, @

- Keyword với context

Keywords khai báo

1. class

Là thành phần không thể thiếu trong mọi ứng dụng, chúng giúp chúng ta tổ chức và quản lý code thành những khối, đặc điểm:

  • Tính kế thừa.
  • Cho phép ép kiểu hoặc check kiểu lúc chương trình chạy runtime.
  • Tính huỷ: cho phép instance của một class phải phóng bất cứ tài nguyên nào mà nó đã gán, hàm huỷ được gọi ngay trước khi instance của một class được giải phóng (trả lại bộ nhớ đã được cấp phát tới ram).
  • Class là kiểu tham chiếu, và chính vì nó là kiểu tham chiếu nên nó có thêm toán tử đồng nhất thức (===), có nghĩa rằng hai biến hoặc hằng của kiểu class tham chiếu tới chính xác cùng một instance của class.
class Person
{
    var name:String
    var age:Int
    var gender:String
}

2. struct

Là thành phần không thể thiếu trong mọi ứng dụng như class, chúng giúp chúng ta tổ chức và quản lý code thành những khối, đặc điểm:

  • Không có tính kế thừa.
  • Là kiểu tham trị.
  • Không có tính huỷ.
struct Person
{
    var name: String
    var age: Int
    var gender: String
}

3. func

Cho phép khai báo 1 hàm.

func addNumbers(num1:Int, num2:Int) -> Int
{
    return num1+num2
}

4. import

Cho phép nhúng 1 framework hoặc 1 module khác vào trong module hiện có.

import UIKit
//All of UIKit's code is now available
class Foo {}

5. init

Là quá trình chuẩn bị một instance của class, struct để sử dụng.

class Person 
{
    init()
    {
        //Set default values, prep for use, etc.
    }
}

6. let

Định nghĩa 1 biến hằng số, let là sau này không thay đổi được giá trị của nó

let constantString = "This cannot be mutated going forward"

7. var

Định nghĩa 1 biến có thể thay đổi được giá trị.

var mutableString = ""
mutableString = "Mutated"

8. enum

Giúp định nghĩa 1 tập hợp có số phần tử cố định và được liệt kê sẵn.

enum Gender
{
    case male
    case female
}

9. extension

Cho phép mở rộng thêm hàm từ 1 class hoặc struct hoặc enum hoặc protocol.

class Person
{
    var name:String = ""
    var age:Int = 0
    var gender:String = ""
}
extension Person
{
    func printInfo()
    {
        print("My name is \(name), I'm \(age) years old and I'm a \(gender).")
    }
}

10. protocol

Định nghĩa các giao thức, class, struct hay enum mà adopt procotol này thì phải theo chuẩn của nó.

protocol Blog
{
    var wordCount:Int { get set }
    func printReaderStats()
}
class TTIDGPost : Blog
{
    var wordCount: Int
    
    init(wordCount: Int)
    {
        self.wordCount = wordCount
    }
func printReaderStats()
    {
        //Print out some stats on the post
    }
}

11. deinit

Được gọi ngay khi instance của 1 class được giải phóng vùng nhớ trong vùng nhớ heap.

class Person
{
    var name:String
    var age:Int
    var gender:String
deinit
   {
        // Giải phóng vùng nhớ trong heap.
   }
}

12. open

Một access control cho phép object được sử dụng ở ngoài module khác . Thường viết bằng open khi tạo ra các framework.

open var foo: String? 

13. static

Biến nào mà được định nghĩa bằng từ khoá static thì nó tồn tại suốt trong 1 chương trình và không bị huỷ, ngoài ra sử dụng static thì ta có thể thao tác biến hoặc hàm bằng class hoặc struct hoặc enum đó luôn.

class Person
{
    var jobTitle: String?
static func assignRandomName(_ aPerson: Person)
    {
        aPerson.jobTitle = "Some random job"
    }
}
let somePerson = Person()
Person.assignRandomName(somePerson)
//somePerson.jobTitle is now "Some random job"

14. private

Một access control cho phép chỉ dùng trong 1 scope.

class Person
{
    private var jobTitle = ""
}
extension Person
{
// Chỗ này sẽ compile lỗi
    func printJobTitle()
    {
        print("My job is \(jobTitle)")
    }
}

15. fileprivate

Là 1 access control giới hạn trong 1 file, thường dùng cho extension.

class Person
{
    fileprivate var jobTitle:String = ""
}
extension Person
{
// nếu mà khai báo bằng private là compiler báo lỗi
    func printJobTitle()
    {
        print("My job is \(jobTitle)")
    }
}

16. typealias

Cho phép đặt 1 tên khác của 1 kiểu sẵn có.

typealias JSONDictionary = [String: AnyObject]
func parseJSON(_ deserializedData: JSONDictionary){}