Swift cơ bản cho iOS: những khái niệm đầu tiên dành cho người mới

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Swift là ngôn ngữ hiện đại do Apple thiết kế để phát triển ứng dụng iOS, macOS, watchOS và nhiều nền tảng khác. Cú pháp sạch, an toàn và khá dễ đọc. Bài viết này điểm qua các khái niệm đầu tiên bạn nên biết, kèm ví dụ chạy được.

Công cụ để thử Swift

Để làm ứng dụng iOS bạn cần máy Mac chạy Xcode. Nếu chỉ muốn học cú pháp, có thể dùng Swift Playgrounds hoặc các trình chạy Swift trực tuyến. Xcode có sẵn Playground để thử code và xem kết quả tức thì.

Hằng, biến và kiểu dữ liệu

let name = "Bem"        // hằng, không đổi
var age = 20            // biến, có thể đổi
age += 1

let price: Double = 19.5
let isActive = true
let tags = ["swift", "ios"]            // mảng
let scores = ["an": 8, "binh": 9]     // từ điển

print("Xin chào \(name), \(age) tuổi")

Swift suy luận kiểu và rất chặt chẽ: bạn không thể cộng trực tiếp Int với Double mà không chuyển đổi. Quy tắc nên nhớ là dùng let mặc định, chỉ dùng var khi giá trị cần thay đổi.

Hàm

func greet(person: String, from city: String = "Hà Nội") -> String {
    return "Chào \(person) đến từ \(city)"
}

print(greet(person: "Lan"))
print(greet(person: "Minh", from: "Đà Nẵng"))

Swift có nhãn tham số (argument label), làm lời gọi hàm đọc gần như một câu tự nhiên.

Điều kiện và vòng lặp

let score = 85

switch score {
case 90...100: print("Xuất sắc")
case 70..<90: print("Khá")
default: print("Cần cố gắng")
}

for i in 1...3 {
    print("Lần \(i)")
}

let names = ["An", "Bình", "Chi"]
for (index, n) in names.enumerated() {
    print(index, n)
}

Struct và class

Cả hai đều định nghĩa kiểu có thuộc tính và phương thức. Khác biệt quan trọng: struct là kiểu giá trị (khi gán sẽ sao chép), class là kiểu tham chiếu (nhiều biến cùng trỏ một đối tượng) và hỗ trợ kế thừa. Swift khuyến khích dùng struct trước, chuyển sang class khi cần danh tính chung hoặc kế thừa.

struct Student {
    var name: String
    var grade: Int

    func describe() -> String {
        "\(name) - lớp \(grade)"
    }
}

var a = Student(name: "An", grade: 10)
var b = a
b.name = "Bình"
print(a.name) // vẫn là "An"

Closure

Closure là khối code có thể truyền đi như giá trị, tương tự lambda ở ngôn ngữ khác:

let numbers = [1, 2, 3, 4, 5]
let doubled = numbers.map { $0 * 2 }
let evens = numbers.filter { $0 % 2 == 0 }
let total = numbers.reduce(0, +)
print(doubled, evens, total)

Protocol

Protocol định nghĩa một tập yêu cầu mà kiểu nào đó phải thực hiện, giống interface ở ngôn ngữ khác. Swift hay được mô tả là ngôn ngữ hướng protocol vì cách tiếp cận này.

protocol Describable {
    func describe() -> String
}

extension Student: Describable {}

Kinh nghiệm học

  1. Thành thạo Optional trước, vì nó xuất hiện ở khắp nơi (có bài riêng nói về chủ đề này).
  2. Viết thật nhiều đoạn nhỏ trong Playground để thử nghiệm.
  3. Đọc cuốn hướng dẫn ngôn ngữ chính thức của Apple, rất rõ ràng.
  4. Sau cú pháp, chuyển sang SwiftUI để dựng giao diện.

Kết luận

Swift an toàn, gọn và dễ học nếu bạn đi từng bước: biến, hàm, struct, closure, protocol. Chỉ cần nắm vững các nền tảng này là bạn đã sẵn sàng bước vào SwiftUI và làm ứng dụng iOS đầu tiên.

Xử lý lỗi và bất đồng bộ trong Swift

Hai chủ đề bạn sẽ gặp rất sớm là xử lý lỗi và tác vụ bất đồng bộ. Swift dùng cơ chế throw, try, catch: hàm có thể ném lỗi được đánh dấu throws, và nơi gọi phải xử lý bằng do-catch hoặc truyền tiếp.

enum InputError: Error {
    case empty
    case tooShort
}

func validate(_ text: String) throws -> String {
    guard !text.isEmpty else { throw InputError.empty }
    guard text.count >= 3 else { throw InputError.tooShort }
    return text
}

do {
    let ok = try validate("ab")
    print(ok)
} catch InputError.tooShort {
    print("Quá ngắn")
} catch {
    print("Lỗi khác: \(error)")
}

Với bất đồng bộ, Swift hiện đại dùng async và await giúp code chạy tuần tự dễ đọc khi gọi mạng, thay cho các closure lồng nhau. Hàm async được gọi bên trong Task hoặc một ngữ cảnh async khác. Hãy làm quen sớm với hai khái niệm này vì hầu như mọi ứng dụng thực tế đều cần.

Cách luyện tập hiệu quả

Hãy đặt mục tiêu nhỏ mỗi ngày: viết một hàm, một struct, một đoạn xử lý mảng. Thử giải các bài toán cơ bản như đảo chuỗi, đếm từ, kiểm tra số nguyên tố bằng Swift để quen cú pháp. Sau hai tuần, chuyển sang dựng giao diện nhỏ bằng SwiftUI như bộ đếm hay danh sách việc cần làm. Đọc mã của người khác trên các kho mã nguồn mở cũng giúp bạn học phong cách viết Swift chuẩn.

Bạn có thể xem các lộ trình học lập trình di động phù hợp với mình trên codebem.com.

author_photo
Nguyễn Đình Cường

0 comment