Các lớp Swift có giống như một con trỏ isa có thể được ánh xạ lại không?Swift isa pointer remapping hoặc phương pháp được hỗ trợ khác swizzling
Chúng tôi đã thấy Swift uses a more static method dispatch so với mục tiêu-C, trong đó (trừ khi một lớp dịch vụ từ Foundation/NSObject) ngăn chặn kiểu chuyển động dựa trên việc triển khai phương thức remapping khi chạy.
Tôi tự hỏi cách chúng tôi sẽ triển khai các tính năng động dựa trên đánh chặn phương pháp như mẫu quan sát, thông báo, v.v ...? Hiện tại tất cả những thứ này được cung cấp bởi lớp Objective-C, và có thể dễ dàng tích hợp vào Swift. Nhưng, nếu chúng ta muốn cung cấp các loại tính năng này trong một khuôn khổ (hoặc ứng dụng) của chính chúng ta, thì có cần phải thực hiện chúng trong Objective-C không? Tôi cho rằng có một cách để làm điều đó 'nguyên bản'.
Một loại tranh luận phổ biến khác cho mục tiêu-C là ánh xạ lại con trỏ-isa để tạo ra một lớp con khi đang di chuyển. Đây có phải là loại swizzling được hỗ trợ trong Swift? Nếu không phải là những gì là cách được hỗ trợ để chặn các lời gọi phương thức tùy ý?
Chỉnh sửa:Như @jatoben chỉ ra, vì arm64 isa-remapping phải được thực hiện bằng cách gọi object_setClass() chứ không phải bằng cách truy cập trực tiếp giá trị. Điều này vẫn được gọi là 'con trỏ isa swizzling'
Không an toàn khi truy cập isa trực tiếp trong Obj-C, hoặc: http://sealiesoftware.com/blog/archive/2013/09/24/objc_explain_Non-pointer_isa.html – jatoben