Cả Struct và Class đều có thể định nghĩa các thuộc tính để lưu trữ giá trị và chúng có thể định nghĩa các hàm.
Chúng có thể định nghĩa cácsubscript để cung cấp quyền truy cập vào các giá trị với cú pháp subscript.
Chúng có thể định nghĩa các trình khởi tạo để thiết lập trạng thái ban đầu của chúng, với init().
Chúng có thể được mở rộng với extension (điều này rất quan trọng!).
Chúng có thể tuân theo các protocol, ví dụ như để hỗ trợ Protocol Oriented Programming.
Chúng có thể làm việc với các generic để cung cấp các kiểu linh hoạt và có thể tái sử dụng.
Class hỗ trợ thêm một số khả năng mà Struct không có:
Class có thể kế thừa từ một Class khác, giống như bạn kế thừa từ UIViewController để tạo Class con của riêng bạn.
Các Class có thể được deinitial hóa, tức là bạn có thể gọi một hàm deinit() trước khi Class bị hủy (destroy).
Class là kiểu tham chiếu và Struct là kiểu giá trị:
Kiểu giá trị: Khi bạn sao chép một kiểu giá trị (tức là khi nó được gán, khởi tạo hoặc truyền vào một hàm), mỗi instance sẽ giữ một bản sao duy nhất của dữ liệu. Nếu bạn thay đổi một instance, instance kia cũng không thay đổi.
Kiểu tham chiếu: Khi bạn sao chép một kiểu tham chiếu, mỗi instance sẽ chia sẻ dữ liệu. Tham chiếu chính nó được sao chép, nhưng không phải là dữ liệu mà nó tham chiếu. Khi bạn thay đổi một instance này, instance kia cũng thay đổi theo.