Menu
CoddyTech

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ácCú pháp
In một dòngprint("Hello, World!")
In không xuống dòngprint("Hi", terminator: "")
Nội suy chuỗiprint("Hi \(name)")
Chú thích// this is a comment
Chú thích nhiều dòng/* ... */
Import một moduleimport Foundation
Chạy một tệpswift 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ácCú pháp
Hằng sốlet age = 30
Biếnvar count = 0
Khai báo kiểu tường minhlet name: String = "Ada"
Các kiểu cơ bảnInt, Double, String, Bool, Character
Ép kiểuDouble(i), String(n), Int("42")
Tuplelet pair = (1, "a")
Bí danh kiểutypealias ID = Int
Kiểm tra kiểuvalue 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ácCú pháp
Khai báo optionalvar name: String? = nil
Optional bindingif let n = name { ... }
Unwrap bằng guardguard let n = name else { return }
Nil-coalescinglet n = name ?? "default"
Optional chaininguser?.address?.city
Ép unwrap (không an toàn)name!
Unwrap ngầm địnhvar name: String!
Dùng map trên optionalname.map { $0.count }

Chuỗi

Chuỗi là kiểu giá trị và hỗ trợ đầy đủ Unicode.

Thao tácCú pháp
Độ dàis.count
Chữ hoa / chữ thườngs.uppercased(), s.lowercased()
Nối chuỗi"foo" + "bar"
Nội suy"Total: \(price)"
Kiểm tra chứa chuỗi cons.contains("ell")
Kiểm tra tiền tố / hậu tốs.hasPrefix("he")
Tách chuỗis.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ácCú 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 / filternums.map { $0 * 2 }, nums.filter { $0 > 1 }
Tạo dictionary với giá trị sẵn cóvar ages = ["Ada": 30]
Truy cập dictionaryages["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 setids.insert(4)
Duyệt dictionaryfor (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ácCú pháp
if / elseif x > 0 { ... } else { ... }
Toán tử ba ngôilet r = x > 0 ? "pos" : "neg"
Switchswitch n { case 1: ...; default: ... }
Switch theo khoảng giá trịcase 1...5: ...
Vòng lặp for-infor i in 0..<10 { ... }
Vòng lặp for-in qua mảngfor item in items { ... }
Vòng lặp whilewhile x < 100 { ... }
Vòng lặp repeat-whilerepeat { ... } while x < 100
break / continuebreak, continue

Hàm và closure

Hàm có tham số kèm nhãn; closure là khối code độc lập.

Thao tácCú pháp
Định nghĩa hàmfunc add(a: Int, b: Int) -> Int { a + b }
Nhãn bên ngoàifunc greet(to name: String) { ... }
Tham số mặc địnhfunc 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 closurelet f = { (x: Int) -> Int in x * x }
Trailing closurenums.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ácCú pháp
Định nghĩa structstruct Point { var x: Int; var y: Int }
Định nghĩa classclass Person { var name: String }
Hàm khởi tạo của classinit(name: String) { self.name = name }
Tạo instancelet p = Point(x: 1, y: 2)
Phương thức mutating của structmutating func move() { x += 1 }
Phương thức của classfunc greet() { ... }
Kế thừa (chỉ class)class Student: Person { ... }
Thuộc tính tính toánvar area: Int { width * height }
Thành viên staticstatic 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ácCú pháp
Định nghĩa enumenum Direction { case north, south }
Dùng một caselet d = Direction.north
Switch trên enumswitch 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 enumfunc 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?
Optional có thể chứa một giá trị hoặc 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.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học Swift cùng Coddy

Bắt đầu