Bài tập tính tổng trong ngôn ngu swift năm 2024

Khi học 1 ngôn ngữ mới, thì việc học, hiểu và biết cách sử dụng từ mới là điều bắt buộc với bất cứ ai. Ngôn ngữ Swift cũng vậy, nó cũng có những keywords mà chúng ta đều cần phải học và nắm vững để có thể lập trình iOS bằng ngôn ngữ Swift. Trong bài viết này mình xin phép được dịch lại 1 bài tổng hợp các từ khóa sử dụng trong Swift ở link sau: https://medium.com/the-traveled-ios-developers-guide/swift-keywords-v-3-0-1-f59783bf26c

Hy vọng bài viết này sẽ hưu ích cho những bạn đang học Swift và lập trình iOS.

Declaration Keywords

class: định nghĩa 1 kiểu giá trị, giúp chúng ta tổ chức và quản lý code thành những khối, nó có 1 số điểm khác struct như sau:

  • 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
}


struct: cũng dùng để định nghĩa 1 kiểu giá trị giống class, tuy nhiên nó có 1 số điểm khác class như sau:

  • 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
}


enum: định nghĩa 1 tập hợp có số phần tử cố định và được liệt kê sẵn. Enum là kiểu tham trị.

enum Gender {
    case male
    case female
}


protocol: định nghĩa 1 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
    }
}


extension: khai báo phần mở rộng của 1 class, struct, 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).")
    }
}


import : cho phép nhúng framework, module khác vào file đang khai báo để sử dụng.

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


let: định nghĩa 1 hằng số và không thể thay đổi giá trị.

let constantString = "This cannot be mutated going forward"


var: định nghĩa 1 biến số và có thể thay đổi được giá trị.

var mutableString = ""
mutableString = "Mutated"


func: cho phép khai báo 1 hàm để thực hiện 1 chức năng nào đó.

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


init: hàm khởi tạo, dùng để khởi tạo 1 instance của class, struct, hoặc enum để sử dụng.

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


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

struct Person {
    var name: String
    var age: Int
    var gender: String
}

0


inout: các tham số của 1 hàm chỉ tồn tại trong phạm vi của hàm, tức là nó là 1 biến sao chép giá trị của giá trị truyền vào để sử dụng trong hàm đó và kết thúc hàm thì biến đó cũng được giải phóng. Tuy nhiên nếu tham số được khai báo inout thì nó sẽ tham chiếu đến giá trị truyền vào và những thay đổi trong hàm của giá trị đó vẫn còn khi hàm kết thúc. Khi gọi hàm phải đặt dấu (&) ngay trước tên biến để cho trình biên dịch biết biến đó có thể thay dổi trong hàm.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

1


operator: các toán tử cho phép chúng ta kiểm tra, thay đổi hoặc kết hợp các giá trị lại với nhau.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

2


static: khai báo toàn cục. Biến khai báo static thì sẽ tồn tại suốt trong 1 chương trình mà không bị huỷ. Biến và hàm static có thể được truy cập trực tiếp từ Type (nếu khai báo trong Type) mà ko cần khởi tạo instance.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

3


subscript: cho phép truy xuất đến 1 thành viên nằm trong một collection, list hoặc sequence.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

4


typealias: đặt 1 tên khác của 1 kiểu sẵn có.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

5


associatedtype: cho phép tạo 1 tên bất kỳ cho 1 loại biến trong khai báo của 1 protocol. Biến này được qui định là loại nào khi protocol đó được adopt.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

6

Access Control Keywords

private: cho phép biến, hàm được sử dụng trong 1 scope chứa nó.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

7


fileprivate: giới hạn sử dụng trong 1 file, thường dùng kèm extension.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

8


internal : cho phép sử dụng trong 1 module, khi khai báo nếu không đi kèm 1 access control nào thì mặc định là internal.

struct Person {
    var name: String
    var age: Int
    var gender: String
}

9


public: cho phép truy cập bên ngoài module khai báo nhưng không thể kế thừa (subclassable) hay ghi đè (overridden) bên ngoài module.