Trong Swift, Any
và AnyObject
đều là các kiểu dữ liệu đặc biệt dùng để đại diện cho bất kỳ kiểu dữ liệu nào, nhưng chúng có sự khác biệt quan trọng:
Any
- Có thể chứa bất kỳ kiểu dữ liệu nào, bao gồm cả kiểu giá trị (
struct
,enum
) và kiểu tham chiếu (class
). - Dùng để đại diện cho bất kỳ kiểu dữ liệu nào trong Swift, kể cả các kiểu nguyên thủy như
Int
,String
,Double
,Bool
, v.v.
- Có thể chứa bất kỳ kiểu dữ liệu nào, bao gồm cả kiểu giá trị (
AnyObject
- Chỉ có thể chứa các kiểu tham chiếu (các đối tượng của class).
- Không thể chứa các kiểu giá trị (
struct
,enum
,Int
,String
... trừ khi chúng được bọc trong một class). - Thường được sử dụng khi làm việc với các đối tượng trong Objective-C hoặc khi cần lưu trữ danh sách các đối tượng class.
Cách sử dụng associatedtype trong protocol?
Trong Swift, associatedtype được sử dụng trong protocol để định nghĩa một kiểu dữ liệu liên kết (associated type), giúp protocol trở nên linh hoạt hơn mà không cần chỉ định trước một kiểu dữ liệu cụ thể. Mở rộng Giao thức trong Swift 6.0: Những Thủ Thuật MớiBài

Ví dụ:
class MyClass {}
var anyObjectValue: AnyObject = MyClass()
// Dòng sau sẽ gây lỗi vì Int không phải là một class
// anyObjectValue = 42 // ❌ Lỗi
Ví dụ:
var anyValue: Any = 42
anyValue = "Hello"
anyValue = [1, 2, 3]
Tóm tắt:
Đặc điểm | Any |
AnyObject |
---|---|---|
Chứa class | ✅ | ✅ |
Chứa struct/enum | ✅ | ❌ |
Chứa kiểu nguyên thủy (Int, String...) | ✅ | ❌ |
Nếu bạn cần một biến có thể chứa mọi loại dữ liệu, hãy dùng Any
. Nếu bạn chỉ muốn lưu trữ các object (class), hãy dùng AnyObject
.
Swift 6.0 Actors: Tạm biệt Tình trạng Race Conditions!
Bài viết gốc bởi Adi Mizrahi, đăng trên CodeX, ngày 8 tháng 1 năm 2025. Chào các tín đồ Swift! Nếu bạn giống tôi, bạn luôn tìm kiếm cách để làm cho mã của mình sạch hơn, an toàn hơn và — hãy thừa nhận đi — thú vị hơn một chút
