Cheat sheet Swift
Cập nhật lần cuối
Hello World và kiến thức cơ bản
Swift không cần code khởi tạo rườm rà ở cấp cao nhất: chỉ một dòng là chạy được.
| Thao tác | Cú pháp |
|---|---|
| In một dòng | print("Hello, World!") |
| In không xuống dòng | print("Hi", terminator: "") |
| Nội suy chuỗi | print("Hi \(name)") |
| Chú thích | // this is a comment |
| Chú thích nhiều dòng | /* ... */ |
| Import một module | import Foundation |
| Chạy một tệp | swift run hoặc swift main.swift |
Biến (let / var) và kiểu dữ liệu
Dùng let cho hằng số và var cho giá trị thay đổi được; kiểu dữ liệu thường được tự suy ra.
| Thao tác | Cú pháp |
|---|---|
| Hằng số | let age = 30 |
| Biến | var count = 0 |
| Khai báo kiểu tường minh | let name: String = "Ada" |
| Các kiểu cơ bản | Int, Double, String, Bool, Character |
| Ép kiểu | Double(i), String(n), Int("42") |
| Tuple | let pair = (1, "a") |
| Bí danh kiểu | typealias ID = Int |
| Kiểm tra kiểu | value is String, value as? String |
Optional
Optional mô tả trường hợp một giá trị có thể vắng mặt; hãy unwrap trước khi dùng.
| Thao tác | Cú pháp |
|---|---|
| Khai báo optional | var name: String? = nil |
| Optional binding | if let n = name { ... } |
| Unwrap bằng guard | guard let n = name else { return } |
| Nil-coalescing | let n = name ?? "default" |
| Optional chaining | user?.address?.city |
| Ép unwrap (không an toàn) | name! |
| Unwrap ngầm định | var name: String! |
| Dùng map trên optional | name.map { $0.count } |
Chuỗi
Chuỗi là kiểu giá trị và hỗ trợ đầy đủ Unicode.
| Thao tác | Cú pháp |
|---|---|
| Độ dài | s.count |
| Chữ hoa / chữ thường | s.uppercased(), s.lowercased() |
| Nối chuỗi | "foo" + "bar" |
| Nội suy | "Total: \(price)" |
| Kiểm tra chứa chuỗi con | s.contains("ell") |
| Kiểm tra tiền tố / hậu tố | s.hasPrefix("he") |
| Tách chuỗi | s.split(separator: ",") |
| Thay thế | s.replacingOccurrences(of: "a", with: "b") |
| Chuỗi nhiều dòng | """ ... """ |
Collection (Array, Dictionary, Set)
Ba kiểu collection cốt lõi, đều là kiểu giá trị.
| Thao tác | Cú pháp |
|---|---|
| Tạo mảng với giá trị sẵn có | var nums = [1, 2, 3] |
| Thêm phần tử | nums.append(4) |
| Truy cập / đếm phần tử | nums[0], nums.count |
| Map / filter | nums.map { $0 * 2 }, nums.filter { $0 > 1 } |
| Tạo dictionary với giá trị sẵn có | var ages = ["Ada": 30] |
| Truy cập dictionary | ages["Ada"] trả về một optional |
| Tạo set với giá trị sẵn có | var ids: Set = [1, 2, 3] |
| Thêm vào set | ids.insert(4) |
| Duyệt dictionary | for (k, v) in ages { ... } |
Luồng điều khiển
Điều kiện không cần dấu ngoặc; switch phải bao quát mọi trường hợp.
| Thao tác | Cú pháp |
|---|---|
| if / else | if x > 0 { ... } else { ... } |
| Toán tử ba ngôi | let r = x > 0 ? "pos" : "neg" |
| Switch | switch n { case 1: ...; default: ... } |
| Switch theo khoảng giá trị | case 1...5: ... |
| Vòng lặp for-in | for i in 0..<10 { ... } |
| Vòng lặp for-in qua mảng | for item in items { ... } |
| Vòng lặp while | while x < 100 { ... } |
| Vòng lặp repeat-while | repeat { ... } while x < 100 |
| break / continue | break, continue |
Hàm và closure
Hàm có tham số kèm nhãn; closure là khối code độc lập.
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa hàm | func add(a: Int, b: Int) -> Int { a + b } |
| Nhãn bên ngoài | func greet(to name: String) { ... } |
| Tham số mặc định | func greet(name: String = "World") { ... } |
| Tham số biến thiên (variadic) | func sum(_ nums: Int...) -> Int { ... } |
| Trả về nhiều giá trị (tuple) | func bounds() -> (min: Int, max: Int) { ... } |
| Biểu thức closure | let f = { (x: Int) -> Int in x * x } |
| Trailing closure | nums.map { $0 * 2 } |
| Đối số viết tắt | { $0 + $1 } |
Struct và class
Struct là kiểu giá trị (được sao chép); class là kiểu tham chiếu (được dùng chung).
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa struct | struct Point { var x: Int; var y: Int } |
| Định nghĩa class | class Person { var name: String } |
| Hàm khởi tạo của class | init(name: String) { self.name = name } |
| Tạo instance | let p = Point(x: 1, y: 2) |
| Phương thức mutating của struct | mutating func move() { x += 1 } |
| Phương thức của class | func greet() { ... } |
| Kế thừa (chỉ class) | class Student: Person { ... } |
| Thuộc tính tính toán | var area: Int { width * height } |
| Thành viên static | static let shared = Manager() |
Enum
Enum gom các giá trị liên quan và có thể mang dữ liệu đi kèm.
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa enum | enum Direction { case north, south } |
| Dùng một case | let d = Direction.north |
| Switch trên enum | switch d { case .north: ... } |
| Giá trị thô (raw value) | enum Status: Int { case ok = 200 } |
| Truy cập giá trị thô | Status.ok.rawValue |
| Khởi tạo từ giá trị thô | Status(rawValue: 200) |
| Giá trị đi kèm (associated value) | case result(Int, String) |
| Phương thức trên enum | func label() -> String { ... } |
Cú pháp Swift bạn dùng nhiều nhất, gom trong một trang. Cheat sheet Swift này là bảng tra cứu nhanh cho phần cốt lõi của ngôn ngữ: hằng số và biến, optional, chuỗi, collection, luồng điều khiển, hàm và closure, cùng struct, class và enum mà bạn dùng để xây dựng ứng dụng iOS và macOS.
Mọi thứ ở đây đều là Swift chuẩn và biên dịch được bằng toolchain chính thức. Sao chép phần bạn cần, hoặc chạy thử từng đoạn code ngay trong playground Swift, không cần Xcode.
Câu hỏi thường gặp về cheat sheet Swift
Cheat sheet Swift này có miễn phí không?
Có. Cheat sheet Swift này hoàn toàn miễn phí, không cần đăng ký. Lưu trang lại và quay lại bất cứ khi nào bạn cần tra một mẫu optional, cú pháp closure hay phương thức của collection.
Làm sao để unwrap một optional trong Swift?
nil, nên bạn cần unwrap trước khi dùng. Các cách an toàn là optional binding (if let n = name { ... }), guard let ở đầu hàm, toán tử nil-coalescing (name ?? "default") và optional chaining (user?.name). Ép unwrap bằng name! vẫn chạy nhưng sẽ crash nếu giá trị là nil, nên chỉ dùng khi bạn chắc chắn.Struct và class trong Swift khác nhau thế nào?
struct là kiểu giá trị: gán hoặc truyền nó sẽ tạo một bản sao, nên thay đổi không ảnh hưởng đến bản gốc. class là kiểu tham chiếu: các bản sao dùng chung một instance, và chỉ class hỗ trợ kế thừa. Apple khuyên nên ưu tiên struct theo mặc định và dùng class khi bạn cần trạng thái thay đổi được dùng chung hoặc cần kế thừa.Có thể luyện tập Swift online không?
Có. Mở playground Swift để chạy bất kỳ đoạn code nào trong cheat sheet này ngay trên trình duyệt, không cần cài Xcode. Khi muốn học có lộ trình, khóa học Swift tương tác miễn phí của Coddy dẫn bạn từng bước từ optional và collection đến struct, class và enum.
Cheat sheet này có phù hợp cho người mới bắt đầu không?
Có. Nội dung đi từ các chủ đề thông dụng nhất (biến, optional, luồng điều khiển) đến các chủ đề nâng cao (closure, so sánh struct và class, enum), nên ngay ngày đầu bạn đã dùng được các phần trên cùng, rồi dần làm quen với phần còn lại.