Generics nhanh chóng

Mar 09 2023
Generics cho phép bạn viết mã linh hoạt và có thể tái sử dụng, có thể hoạt động với các loại khác nhau. Bằng cách sử dụng khái quát, bạn có thể định nghĩa các hàm, lớp và cấu trúc có thể hoạt động với bất kỳ loại nào, thay vì chỉ một loại cụ thể.

Generics cho phép bạn viết mã linh hoạt và có thể tái sử dụng, có thể hoạt động với các loại khác nhau. Bằng cách sử dụng khái quát, bạn có thể định nghĩa các hàm, lớp và cấu trúc có thể hoạt động với bất kỳ loại nào, thay vì chỉ một loại cụ thể.

Đây là một ví dụ về một hàm chung nhận vào một mảng thuộc bất kỳ kiểu nào và trả về phần tử đầu tiên của mảng đó:

func firstElement<T>(of array: [T]) -> T? {
    array.first
}

Sau đó, bạn có thể gọi hàm này với bất kỳ loại mảng nào:

let strings = ["apple", "banana", "orange"]
let firstString = firstElement(of: strings) // "apple"

let numbers = [1, 2, 3]
let firstNumber = firstElement(of: numbers) // 1

struct Stack<T> {
    private var elements = [T]()

    mutating func push(_ element: T) {
        elements.append(element)
    }

    mutating func pop() -> T? {
        elements.popLast()
    }
}

var stringStack = Stack<String>()
stringStack.push("apple")
stringStack.push("banana")
let poppedString = stringStack.pop() // "banana"

var numberStack = Stack<Int>()
numberStack.push(1)
numberStack.push(2)
let poppedNumber = numberStack.pop() // 2