Các Keyword cơ bản trong lập trình Swift



  • Hôm nay mình xin viết một phần về một số từ khoá cơ bản trong lập trình Swift. Ở phần này mình sẽ viết về các keywords liên quan tới việc khai báo hàm, thuộc tính, lớp ...

    Declaration Keywords

    let

    let: định nghĩa 1 biến bằng let là sau này không có thay đổi giá trị nó được đó.

    let constantString: String = "Khong the thay doi gia tri duoc"
    constantString = "String moi" // Báo lỗi
    

    var

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

    var number: Int = 1
    number = 2
    

    func

    func: cho phép khai báo 1 phương thức, chứa một khối lệnh nhằm làm một nhiệm vụ nào đó.

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

    import :

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

    import UIKit
    / /Tất cả các hàm trong UIKit đều có thể dùng trong file khai báo
    class Foo {}
    

    init

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

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

    deinit

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

    class Person {
        var name: String
        var age: Int
        var gender: String
        deinit {
            // Deallocated
        }
    }
    

    associatedtype:

    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.

    protocol Add {
        associatedtype NumberType
    }
    class Math: Add {
        typealias NumberType = Int //Có thể là kiểu khác ở đây (Double, Float, ...)
    }
    

    typealias

    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) { }
    

    extension

    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).")
        }
    }
    

    inout

    inout: Tham số chỉ tồn tại trong phạm vi của hàm, nên sử dụng inout sẽ giúp thay đổi giá trị của một tham số của hàm và sự thay đổi đó 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.

    func swapInts(inout a: Int, inout _ b:Int) {  
        let temp = a       
        a = b        
        b = temp    
    }
    
    var wifeMoney: Int = 0
    var myMoney: Int = 1000
    
    print(wifeMoney) // 0
    print(myMoney) // 1000
    
    // Tới cuối tháng.
    swapInts(&myMoney, &wifeMoney)
        
    print(wifeMoney) // 1000
    print(myMoney) // 0
    

    internal

    internal: Một access control cho phép sử dụng trong 1 module, không ghi gì thì mặc định là internal.

    class Person {
        internal var jobTitle:String = ""
    }
    let aPerson = Person()
    aPerson.jobTitle = "This can set anywhere in the application"
    

    open

    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? 
    

    operator

    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.

    let number1 = 10
    let number2 = -number1 
    let number3 = 5 + 3
    
    // "các toán tử kết hợp, liên kết các giá trị với nhau."
    
    if myGirlFriend.isBeautiful && myGirlFriend.isIntelligent && myGirlFriend.isRich {
        // "Nhân vô thập toàn, thế nên bạn gái nào mà xinh đẹp, thông minh, giàu có
        // thì chắc chắn sẽ không có được tôi :]] ."
    } else {
        //...
    }
    
    // "Toán tử 3 ngôi giúp code ngắn hơn."
    let checkNumber3_IsOdd = (number3 % 2 == 0) ? false : true
    

    private

    private: Một access control cho phép chỉ xài trong 1 scope.

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

    fileprivate

    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 {
        func printJobTitle() {
            print("My job is \(jobTitle)") // nếu mà khai báo bằng private là compiler báo lỗi
        }
    }
    

    protocol

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

    public

    public: Một access control cho phép object sử dụng ở tất cả các file trong cùng 1 module.

    public var foo:String? //This can be overriden and accessible anywhere inside of the app, but not outside of it.
    

    static

    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"
    

    class

    class: Dùng để tạo ra lớp là một nhóm các đối tượng mà có các thuộc tính chung. Nó có 1 số điểm khác với struct như sau:

    • Có thể kế thừa các thuộc tính và tình năng từ một class khác.
    • Có thể ép kiểu về class mà nó kế thừa.
    • Có thể giải phóng tài nguyên khi nó không còn sử dụng nữa.
    • Có thể có nhiều tham chiếu tới một class đã được khỏi tạo.
    class Person {
        var name: String
        var age: Int
        var gender: String
    }
    

    struct

    struct: cũng 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, 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

    enum: Định nghĩa một nhóm các phần tử có liên quan và được liệt kê sẵn.

        enum Gender {
        case male
        case female
    }
    

    subscript

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

    var postMetrics = ["Likes":422, "ReadPercentage":0.58, "Views":3409]
    let postLikes = postMetrics["Likes"]
    

    Nguồn: Viblo


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới LaptrinhX, vui lòng đợi một lúc để chúng tôi thử kết nối lại.