Không. Các đối tượng Swift không thực sự thừa hưởng từ bất kỳ lớp cơ sở gốc nào. Trình biên dịch có thể chèn một chi tiết thực hiện, nhưng ngôn ngữ không có.
Giải pháp là hàm và thường là hàm chung, chứ không phải là phương thức. Một cái gì đó áp dụng cho "mọi loại đối tượng" không thực sự được đóng gói. Có rất ít hành động áp dụng cho mọi điều có thể tưởng tượng được trong vũ trụ. Nhưng các chức năng có thể ánh xạ hoàn toàn bất cứ điều gì để hoàn toàn bất cứ điều gì khác, do đó, là một công cụ tốt hơn ở đây.
Cũng giống như một lưu ý, không phải tất cả đối tượng kế thừa từ NSObject
một trong hai, và nó không phải là một yêu cầu ngôn ngữ. Nhưng bạn đúng là đại đa số làm. Hãy xem NSProxy
ở trên cùng của cây không phải là NSObject
(nó triển khai giao thức NSObject
, nhưng không kế thừa từ lớp NSObject
). Đó là lý do tại sao id
không giống như NSObject*
.
Để câu hỏi của bạn về các đối tượng liên quan, điều này được built-in:
import Foundation
class Thing { }
let thing = Thing()
var MyKey: Character = "0"
objc_setAssociatedObject(thing, &MyKey, "I'm a value!", objc_AssociationPolicy(OBJC_ASSOCIATION_COPY))
println(objc_getAssociatedObject(thing, &MyKey))
Đây có phải là những gì bạn đang cố gắng để tạo ra? Lưu ý rằng objc_setAssociatedObject
cũng là một hàm, không phải là một phương thức, trong ObjC.
Nguồn
2014-09-04 13:19:49
Doanh nghiệp SwiftObject đó có thể là chi tiết triển khai, nhưng các lớp Swift không kế thừa từ một lớp khác là các lớp gốc mặc định. – Atomix